$30 off During Our Annual Pro Sale. View Details »

Goのとある未定義動作 golang.tokyo #33

izzii
September 29, 2023

Goのとある未定義動作 golang.tokyo #33

golang.tokyo #33 の LT2 でお話しさせていただいた資料になります。
Go で別々の変数が同一のアドレス値を持つ場合があることをご存知でしたか?
詳細はブログでも解説しています。
https://tech.techtouch.jp/entry/go-compiler-study-optimization-undefined-behaviour

izzii

September 29, 2023
Tweet

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. 早速ですがクイズです。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 答え合わせ
    ”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
    仕様として同値になるかは定まってません!

    View Slide

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

    View Slide

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

    View Slide