From 9f24b2f398b7da6b95fbe3642d716575db5d8700 Mon Sep 17 00:00:00 2001 From: cheliequan <liequanche@126.com> Date: 星期五, 03 二月 2023 14:18:15 +0800 Subject: [PATCH] 1.减少bhomebus的内存拷贝 --- api/bhsgo/bhome_node.go | 26 ++++++++++++++++++++++++-- 1 files changed, 24 insertions(+), 2 deletions(-) diff --git a/api/bhsgo/bhome_node.go b/api/bhsgo/bhome_node.go index 7fcb43c..a295673 100644 --- a/api/bhsgo/bhome_node.go +++ b/api/bhsgo/bhome_node.go @@ -8,10 +8,27 @@ import "C" import ( + "reflect" "unsafe" bh "basic.com/valib/c_bhomebus.git/proto/source/bhome_msg" ) + +func unsafeGetBytes(s string) []byte { + const MaxInt32 = 1<<31 - 1 + return (*[MaxInt32]byte)(unsafe.Pointer((*reflect.StringHeader)( + unsafe.Pointer(&s)).Data))[: len(s)&MaxInt32 : len(s)&MaxInt32] +} + +func ByteSlice2String(bs []byte) string { + return *(*string)(unsafe.Pointer(&bs)) +} + +/*func unsafeGetBytes(s string) []byte { + return (*[0x7fff0000]byte)(unsafe.Pointer( + (*reflect.StringHeader)(unsafe.Pointer(&s)).Data), + )[:len(s):len(s)] +}*/ func getPtr(n *[]byte) unsafe.Pointer { if len(*n) > 0 { @@ -150,8 +167,13 @@ defer C.BHFree(cpid, cpid_len) defer C.BHFree(creply, creply_len) if r { - *proc_id = string(C.GoBytes(cpid, cpid_len)) - pub.Unmarshal(C.GoBytes(creply, creply_len)) + //*proc_id = string(C.GoBytes(cpid, cpid_len)) + //pub.Unmarshal(C.GoBytes(creply, creply_len)) + + //const MaxInt32 = 1<<32 - 1 + const maxLen = 0x7fffffff + *proc_id = ByteSlice2String((*[maxLen]byte)(unsafe.Pointer(cpid))[:cpid_len:cpid_len]) + pub.Unmarshal((*[maxLen]byte)(unsafe.Pointer(creply))[:creply_len:creply_len]) } return r -- Gitblit v1.8.0