Slide 1

Slide 1 text

Goのとある未定義動作 市川悠人/izzii @ Techtouch golang.tokyo #33

Slide 2

Slide 2 text

30秒自己紹介 名前:市川悠人/izzii 所属:テックタッチ株式会社 経歴:AI!SRE!セキュリティ! 趣味:登山、ボルダリング X: ahneahneahne

Slide 3

Slide 3 text

早速ですがクイズです。 true or false? true or false?

Slide 4

Slide 4 text

早速ですがクイズです。

Slide 5

Slide 5 text

早速ですがクイズです。 printf で結果が変わるとか 懐かしいですね。(C/C++)

Slide 6

Slide 6 text

コンパイラの判断 上がアドレス参照しない ver 下がアドレス参照する ver a と b がヒープにエスケープ

Slide 7

Slide 7 text

答え合わせ 「アドレス値を必要としない場合」、スタック上の別々のアドレス に変数が入ったまま 「アドレス値を必要とする場合」、ヒープにエスケープされるが zero-size な変数は結果として同一アドレス っぽい

Slide 8

Slide 8 text

思わず Go Forum に投げ込んでみました

Slide 9

Slide 9 text

Go コミュニティあったけぇ〜

Slide 10

Slide 10 text

答え合わせ ”Pointers to distinct zero-size variables may or may not be equal. Two distinct zero-size variables may have the same address in memory.” https://go.dev/ref/spec#Comparison_operators 仕様として同値になるかは定まってません!

Slide 11

Slide 11 text

より詳しくはブログに書いてます! https://tech.techtouch.jp/entry/go-compiler-study -optimization-undefined-behaviour zero-size の説明もしてます。

Slide 12

Slide 12 text

他のブログもご興味あれば! 「テックタッチ テックブログ Go」で検索🔍