HEAP IS A LIE

106 Views

November 09, 26

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

HEAP IS A LIE すぎうり 言語処理系集会#0

2.

自己紹介 すぎうり ● ● ● ● ● ● ● ● ● ● Twitter:@uproad3 Ruby歴20年 VRChat歴7年 仕事:Rails | AWS | LT芸人 趣味:アーキテクト | リファクタリング | 電子工作 言語:Ruby | C# | C | JS | ほかいろいろ 技術:Terraform | Unity | Ubuntu | MySQL | RaspberryPi 悲しきフルスタックエンジニア BareRubyの作者 ヒープからアプリケーションを守る党を結党

3.

PR 組み込みは BareRubyで

4.

スタック ● ● ● ● ● ヒープ 番地の大きい側から順に積み上がる 関数コールで確保し、returnで解放 確保と解放はスタックポインタ(SP)を動かすだけ 隙間ができない メモリ操作の時間は事前に確定する ● ● ● ● 好きな順序・好きなサイズで確保・解放できる mallocで確保し、freeで解放 解放した場所が穴として残る 0x00 0x00 malloc→ SP→ malloc→ SP→ malloc→ SP→ 0xFF 0xFF 穴 ←free

5.

スタック ● ● ● ● ● 番地の大きい側から順に積み上がる 関数コールで確保し、returnで解放 確保と解放はスタックポインタ(SP)を動かすだけ 隙間ができない メモリ操作の時間は事前に確定する ヒープ ● ● ● 好きな順序・好きなサイズで確保・解放できる mallocで確保し、freeで解放 解放した場所が穴として残る ● 空いているうちはいいが確保できなくなると穴を 埋めるためにGCが動いて領域の整理をするがそん なクソ重い処理は健全なアプリケーション実行を 阻害し時間が読めない停止時間を強要する 0x00 SP→ 0x00 malloc→ 極悪 非道 なシステム であって この よう な欠陥を抱 えたシス テム は全 く実用性に 欠け、 アプリケ SP→ SP→ 0xFF malloc→ ーシ ←free 穴 ョン としての責 malloc→ 全に 放棄した怠 惰の産物 であ りそ の結果利用 者に多大 なス トレ スを与える 非人道的 な物 とな っている 務を完 ※ 0xFF ※組み込みにおいて

6.

BareRubyの拡張スタック ※ プログラムは同時に高々 2個の可変長変数しか必要ない ならば空いている方向に両側から伸ばせる機構があれば 十分である これ以上は無駄な領域確保と過剰なサービス提供である ● スタック末尾の可変長領域 ○ ○ ○ ○ ● 0x00 スタックの先端に続けて確保する 先端にある間は自由に伸長できる 関数を呼ぶと新しい変数はその先に積まれる 積まれたら伸ばせなくなるが解放されたら伸ばせる 0番地側の可変長領域(逆スタック) ○ ○ ○ ○ スタックと反対の端から伸びる 通常のとは独立に長さを変えられる 空きは常に中央の1か所にまとまる 両側から伸ばしてぶつからなければ確保は失敗しない 0xFF ※組み込みにおいて

7.

Q.なぜ一般的な言語にはヒープが 存在しているのですか? A.コンパイラが怠惰だからです。 コンパイラが最適化してスタックで収まる はずのアルゴリズムを、ランタイム時のGCという 形でユーザーに押し付けています。 ※ ※組み込みにおいて

8.

Q.本当に2つで十分ですか? A.2つで十分です。 2つ以上必要な状態はあなたの アルゴリズムが間違っています。 コードの最適化を実施してください。 ※ ※組み込みにおいて

9.

STACK CALLS YOU: HEAP IS A LIE