From f6738bc22f2c4065f1681d8a5f06bcaf21ff5c46 Mon Sep 17 00:00:00 2001 From: chenshijun <chenshijun@aiotlink.com> Date: 星期五, 03 四月 2020 13:20:03 +0800 Subject: [PATCH] shmdata 的shmData转内存slice的capacity修改成实际shmdata的长度减去预留32字节记录Len的字段 --- shmData.go | 25 +++++++++++++------------ 1 files changed, 13 insertions(+), 12 deletions(-) diff --git a/shmData.go b/shmData.go index eb9e5c1..56ec5ac 100644 --- a/shmData.go +++ b/shmData.go @@ -7,7 +7,7 @@ // []byte struct type ShmDataInfo struct { - Capacity uint32 + Len uint32 Cache []byte } @@ -18,11 +18,12 @@ )) } +const SHMSLICEOFFSET int = 32 // ConvertToSlice convert to []byte -func ptr2Slice(s unsafe.Pointer, size int) []byte { +func ptr2Slice(s unsafe.Pointer, size,cap int) []byte { var x reflect.SliceHeader x.Len = size - x.Cap = size + x.Cap = cap x.Data = uintptr(s) return *(*[]byte)(unsafe.Pointer(&x)) } @@ -37,12 +38,12 @@ } sdi := shmData2Info(shmData) if len(data) <= len(shmData) { - sdi.Capacity = uint32(len(data)) + sdi.Len = uint32(len(data)) } else { - sdi.Capacity = uint32(len(shmData)) + sdi.Len = uint32(len(shmData)) } - tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity)) + tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET) copy(tmpData, data) err = Detach(shmData) @@ -62,7 +63,7 @@ } sdi := shmData2Info(shmData) - tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity)) + tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET) return tmpData, nil } @@ -74,12 +75,12 @@ func DeepCopyDataToShm(memData,shmData []byte) { sdi := shmData2Info(shmData) if len(memData) <= len(shmData) { - sdi.Capacity = uint32(len(memData)) + sdi.Len = uint32(len(memData)) } else { - sdi.Capacity = uint32(len(shmData)) + sdi.Len = uint32(len(shmData)) } - tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity)) + tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET) copy(tmpData, memData) } @@ -89,7 +90,7 @@ // 浠庡叡浜唴瀛樹腑璇诲彇鏁版嵁浣跨敤:attach->ConvertShmToData->鍙,涓氬姟澶勭悊缁撴潫鍚�->detach func ConvertShmToData(shmData []byte) []byte { sdi := shmData2Info(shmData) - tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity)) + tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Len), len(shmData)-SHMSLICEOFFSET) return tmpData } @@ -99,5 +100,5 @@ // 鏇存柊鏁版嵁鍒板叡浜唴瀛樹娇鐢�: attach->ConvertShmToData->淇敼data鏁版嵁,涓氬姟澶勭悊缁撴潫鍚�->UpdateDataToShm->detach func UpdateDataToShm(data, shmData []byte) { sdi := shmData2Info(shmData) - sdi.Capacity = uint32(len(data)) + sdi.Len = uint32(len(data)) } \ No newline at end of file -- Gitblit v1.8.0