《コンピューター理論》ヒープとスタックとメソッドエリアについて解説

オペレーションシステム

メモリ領域の種類

過去以下のツイート投稿をしました。

メモリの種類は「ヒープ領域」「スタック領域」「静的領域」の3つに分類されます。上で書かれている内容をさらに深ぼって1つずつ解説して行きます。

ヒープ領域

動的に確保されるメモリ

プログラムにより動的に確保されるメモリ領域がヒープ領域です。動的に確保されるというのは予め用意すべきメモリの容量を定義しません。例えばgolangのスライスは値が追加されるごとに動的にメモリ領域を確保し、データを保持します。逆にgolangの配列の場合は初期化する段階でメモリの領域を固定するので静的です。静的の場合、確保したメモリ領域を上回るデータを保持することができません。また近年のOOPの言語ではインスタンスはヒープ領域に確保されます。その他、有名な関数ですとC言語のヒープ領域を確保するmalloc関数などがあげられます。

使われなくなったら戻される

ヒープ領域のメモリはプログラムによって確保されたり、解放されたりする使われ方をするので如何に効率的にメモリを使うのかが重要な観点になってきます。この最適化を行う為のシステムがOSには組み込まれています。

スタック領域

スレッドの制御のために用いられるメモリ領域のことをスタック領域といいます。スレッドというのはプロセスよりも小さい処理単位のことです。

1つのスレッドに対して1つのスタック領域が確保されます。また、関数の引数、戻り値などはスタック領域に確保されます。これらの使用量が増えてくると、スタックのメモリ占有量が徐々に増え、やがてメモリが枯渇します。これをスタックオーバーフローと言います。

LIFO(Last In First Out)

スタック領域について話す時に忘れてはいけない概念はLIFOです。これは後入れ先出し方式とも言われます。メモリ領域にデータを格納する時、新しいデータを干し草のように上に積み上げていき、データを使うときは一番上のデータから使っていくという仕組みです。この仕組みによってメモリ領域を節約することができています。

静的領域

グローバル変数や実行可能なプログラムを置く領域を静的領域と言います。静的領域はアプリケーションを起動した時に確保されるメモリ領域です。プログラムが終了するまで、アプリケーション起動時に確保した領域は保存されます。このことから静的(static)という名前がついています。

番外:その他おすすめの記事

開発がもっと快適に、楽しくなるアイテムを紹介します。アイテム1つで開発の楽しさが全然変わるので、良いアイテムにはじゃんじゃんお金を投資すると良いですよ。

おすすめアイテム①

自分はオフィス次の2点の座布団と背もたれクッションを利用してます。姿勢が安定し、お尻への負担が激減します。オフィスにいるのに自宅で作業しているような感覚になるので気に入ってます。また疲労感もかなり減るので費用対効果が非常に高いアイテムです。

おすすめアイテム②

ブックスタンドみなさん使ってますか?PCを打ちながら参考書見る時に手で抑える必要がなくなるので非常に便利です。自分も購入した時なんでいままで使ってなかたんだろうと後悔したのでまだ持ってない方は買っておくと作業効率があがります。

おすすめアイテム③

PCスタンド、magic keyboard、magic mouseを購入してから、開発効率があがり、身体的負担が減って快適に開発ができるようになりました。

エンジニアの基礎知識・教養

別の記事でエンジニアとして知っておくべき技術本についてまとめました。初心者には最低限読んでおいて欲しい技術本をまとめました。例えば「リーダブルコード」などは技術力の高いエンジニアなら必ず過去に読んでいる本だと思います。

時短アイテム!日々の生活の質を上げる

日常生活における無駄を省く表品をまとめました。1日無駄な作業時間が10分発生するとしたら1年間で3600時間もその無駄な作業に時間を費やすことになります。このような魔の作業を消し去ってくれる商品をまとめました。。

気軽にお声かけください

このような形でほぼ毎日、情報発信を行ってます。技術的な部分で誤っている点などもあるかもしれません。その様な部分を発見した方はTwitterのDMなどで知らせていただければ凄い嬉しいです。また自身自身のエンジニアのネットワークを広げたいと思ってます。日頃六本木や渋谷にいることが多いですので気軽にお誘いください。情報交換しましょう。

筆者
筆者

今回の記事の内容は以上で終了です。最後まで読んでくれてありがとうございました。Twitterもやってるのでフォローしてくれたら嬉しいです!

タイトルとURLをコピーしました