---
title: HEAP IS A LIE
tags: 
author: [すぎうり](https://docswell.com/user/uproad3)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EQDXNGLJP.jpg?width=480
description: HEAP IS A LIE by すぎうり
published: November 09, 26
canonical: https://docswell.com/s/uproad3/5Q2PV7-2026-11-08
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EQDXNGLJP.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/KJ4Z6G5571.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LE1RVDW2EG.jpg)

PR
組み込みは
BareRubyで


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GEW1LY6272.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/47ZPMXY4E3.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/YJ6MN4DG7V.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GJ5Z5Q3XE4.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/9E2RNPZQJR.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/D7YDP5RY7M.jpg)

STACK CALLS YOU:
HEAP IS A LIE


