採択 2019/09/07 15:55〜 Track A LT(5分)

Swiftのスタック変数とCPUレジスタの関係を読み解いた iOSDC Japan 2019

rikusouda rikusouda
このLTはコードの解説というよりは体験共有に比重を置いたLTです

Swiftの関数内でIntのような型(struct)のインスタンスを確保すると、スタックのメモリ領域に格納されるということは過去のWWDCセッションでも語られています。「スタック」とはメインメモリ上の領域です。CPUが演算をするときには「レジスタ」という高速なデータ領域を利用します。メインメモリはCPUのレジスタに比べてとてもアクセス速度が遅いことが知られています。一般的には変数は「スタック」に確保することになっていますが、実際にはCPUレジスタを使って高速化したほうがよい気がしますよね? しているはずですよね? でも確証がありません。

決してSwiftコンパイラに詳しくない私は自分で調査するという発想になかなかならず、疑問を抱えたまま過ごしていました。
WWDC19に参加することができたので、かねてよりの疑問をのラボで聞きました。しかし直接の回答にはたどり着けません。いただいたアドバイスは「LLVM IRとかアセンブラ読むといろいろわかって面白いよ」と。
覚悟を決めて、LLVM IRやARM64のアセンブラを読みました。

雰囲気で「こう動いている気がする」と思っていたことが明確になり「Swiftわからない」という気持ちが減りました。そして、その過程はとても面白い体験となりました。

決してSwiftコンパイラに詳しくない私が、どのように結論にたどり着いたのかの体験を共有します。
iosdc-japan-2018 sponsors iosdc-japan-2018 potential-sponsors 開催後請求
ブースWL 要支払確認 要モノクロロゴ
仮採択 採択しない Rookie
仮採択 採択済 保留 情熱加点 採択しない 前夜祭 目玉 ルーキーズLT参加
Order#確認 アンケートメール不要