1
私はCから文字列を作ろうとしています。私はポインタと長さを持っているので、私はそれをC.GoStringN
関数と呼ぶことができます。Cでcgoの文字列を作る
cgo
はGoString
構造体を生成し、私はそれを直接使用することができれば、私は思っていた:
// struct generated by cgo
typedef struct { const char *p; GoInt n; } GoString;
// I have s and n from somewhere else, can I do this ?
const char* s = ... ; // I own this and dont want go to free it
int n = ... ;
GoString st = {s, n } ;
私は、その寿命I制御char*
の外出文字列を作るためにhereでこれを使用しています。メモリを再利用するために
//export Nbytes
func Nbytes(s string) int {
...
}
の行くだろうガベージコレクタの試み:GoString
はその後、外出先の関数の引数として使用されていますか?
いいえ、私はGCがメモリを再利用するとは思いません。 'GoString'定義の' const char * p'は、ポインタがGo側によって変更(解放)されないことを意味します。 – putu