読者です 読者をやめる 読者になる 読者になる

スタックとヒープは同一?

密やかな違和感。

「ヒープ領域」「スタック領域」といっても結局、物理メモリ上の領域をVM側等で

扱いやすいように役割毎に分割してそう呼んでいるだけ、結局は同じ物理メモリ上。


我々が日々目にする(あるいは構築する)アプリケーションで「ヒープ領域」

「スタック領域」それぞれに割り当てた場合のコストを論じるのは多くの

場合ナンセンスです。

これらのアプリで、インスタンス変数にするかローカル変数にするかで

発生するメモリ割当のコストの違いはたかがしれています、誤差のような

ものです、多くの場合、気にする必要はありません。

http://d.hatena.ne.jp/asipruby/20090425/1240617038

ハードウェア、ないしはCPUによっては、ヒープとスタックのメモリが異なっていることがあります。
例えばARMアーキテクチャなら、高速ローカル・メモリであるTCM(Tightly Coupled Memory:TCM)にスタックを割り当てることもあるでしょう。
この場合、実際に経験した環境においては、TCMを通常のメモリにすると約10%〜20%以上の速度低下がみられます。
TCMは数十Kしかないこともあるので、ヒープに割り当てるには向きません。


また、ヒープからメモリを取得する際に行われるAllocateという作業を考えるに、
これらのコストとスタックのコストを無視することはできません。
C++でアロケータ(ないしはnewや内部のmalloc実装)からメモリを受け取るコストを軽く見積もることは即ち死を意味します。
勿論C++がOO言語でないというのであれば、
アプリ側でミリ秒単位で気にしなければならないC++は既に過去の遺物なのでせう。
すみません。orz...