微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Go中使用reflect.StringHeader是否安全?

如何解决在Go中使用reflect.StringHeader是否安全?

我有一个函数,它将Go字符串数据的指针传递给C(Lua库):

func (L *C.lua_State) pushLString(s string) {
    gostr := (*reflect.StringHeader)(unsafe.Pointer(&s))
    C.lua_pushlstring(L,(*C.char)(unsafe.Pointer(gostr.Data)),C.ulong(gostr.Len))
    // lua_pushlstring copies the given string,not keeping the original pointer.
}

它可以在简单的测试中工作,但是从文档中尚不清楚这是否完全安全。

根据DataFrame.pop,应该将reflect.StringHeader的内存固定为 gostr ,但是Stringheader.Data已经是uintptr“没有指针语义的整数值” -这本身很奇怪,因为如果它没有指针语义,那么字段将不会完全无用,因为在读取值后可能会立即移动内存?还是像reflect.Value.Pointer一样特别对待字段?还是有另一种从字符串获取C指针的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。