什么是处理期望内存大小的CGo函数的规范方法?

时间:2013-09-07 21:25:03

标签: opengl go cgo

我正在玩OpenGL和Go。它主要非常直观,但有一些尴尬的界面问题。 glBufferData的第二个参数应该是内存中缓冲区的大小。

C.glBufferData(C.GLenum(target), C.GLsizeiptr(size), ptr(data), C.GLenum(usage))

如果缓冲区包含32位浮点数,则每个元素将占用4个字节,因此对于第二个参数,我可以执行以下操作:

sizeofFloat := 4
size := sizeofFloat * len(buffer)
C.glBufferData(C.GLenum(target), C.GLsizeiptr(size), ptr(data), C.GLenum(usage))

除了硬编码之外,还有更好的方法可以在内存中获取类型的大小吗?

1 个答案:

答案 0 :(得分:2)

您可以使用unsafe.Sizeof

这是最简单的,因为你已经在使用“不安全”的逻辑了。否则,您可以使用reflect.Type的{​​{1}}方法,以避免导入不安全: