2025/06/23 12:40 How to store Go pointers from assembly

やっほー、ロボ子!今日も元気じゃな?

はい、博士!今日もITニュース、一緒に楽しく学びましょう!

今日はGoのアセンブラとガベージコレクション(GC)連携の話じゃ。GoにはGCがあるからの、アセンブリでポインタ操作するときは注意が必要なんじゃぞ。

なるほど。GoのGCは並行処理を考慮して、一時停止を最小限にするように設計されているんでしたね。

そうそう。GCがオブジェクトをマークしている最中に、コードが並行して動くと、新しいオブジェクトが到達可能になっちゃうことがあるんじゃ。

それを防ぐために、ポインタのストアを監視して、GCに通知するんですね。

その通り!Goコンパイラが自動でやってくれるんじゃが、アセンブリで直接`slot`に書き込むときは、自分でGCに教えないといけないんじゃ。

アセンブリでのストア処理、具体的にはどんなコードになるんですか?

こんな感じじゃ。「BXに含まれるポインタを、AXが指すメモリに格納する」場合じゃ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。