Go でローカル構造体へのポインタを返す
Go では、このような構造は、ローカル構造体へのポインタを作成して返すために使用されます。 :
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
これは C では誤った実践のように見えるかもしれませんが、 Go のセマンティクスは異なります。
ポインター エスケープ分析とメモリ割り当て
Go は、ポインターがローカル スタック スコープをエスケープするかどうかを判断するためにポインター エスケープ分析を採用しています。上の例では、 newPoint() によって返されたポインターは実際にローカル関数をエスケープしています。その結果、オブジェクトはヒープ上に割り当てられます。
ただし、ポインターが関数のスコープ内に留まる場合 (つまり、エスケープしない場合)、コンパイラーはオブジェクトを自由に割り当てることができます。スタック上にあります。ただし、これはコンパイラによって保証されていないことに注意することが重要です。
したがって、メモリの割り当ては、ポインタのエスケープ解析でポインタが関数に対してローカルなままであると明確に結論付けることができるかどうかによって決まります。上記の例のように、ポインターがエスケープする場合、オブジェクトはヒープに割り当てられます。
以上がGo はローカル構造体へのポインターの返しをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。