Cのポインター型のサイズをgolangで取得する
TL;DR
0をuintptrにキャストして使用する
unsafe.Sizeof(uintptr(0))
mallocに渡す
ptr := (**C.char)(C.malloc(C.size_t(unsafe.Sizeof(uintptr(0)))))
モチベーション
cgoでコードを書いていて、ポインターのサイズ分、マロックしたい。
公式 cgoによると、C.sizeof_T
にてサイズが取得できるとあるが、
ポインター型に対する記述がない。
ポインター型であるため以下のようにuintptrで確保すればいいと考えたが、コンパイルエラーになる
# compile error ptr := (**C.char)(C.malloc(C.size_t(unsafe.Sizeof(uintptr)))) # type uintptr is not an expression
解決策
0をuintptrにキャストして使用する
他の解決策
事前に変数を宣言することによっても可能。
ただcで書かれたライブラリにより変数が確保されている場合は、 mallocのサイズ取得のためにしか使用せず冗長になるため避けたいところ。
var charptr *C.char charptr2 := (**C.char)(C.malloc(C.size_t(unsafe.Sizeof(charptr))))