HEXA BLOG
ヘキサブログ
プログラム
メモリイメージ
日に日に気温も上昇し汗ばむ季節になってきましたね
汗かきなので既に薄着になりつつある「オクダ」です。
皆さんは夏に向けてのカラダ作りは大丈夫ですか?
今年はプロジェクトが佳境を迎えるのであきらめムードです
今回はプログラマ向けの少しディープな話をしてみようと思います。
テーマは「メモリ」です。
皆さんがPCを使ったりプログラムをしている時にメモリを意識する事は少ないかもしれませんが、
メモリとうまく付き合っていく事で、更に上位レベルのプログラマになれると思います。
プログラムの最適化や言語仕様の理解、デバッグに役立つと思います。
C言語(C++)を基準に解説していきますが、他の言語でも共通する考え方だと思います。
OSやライブラリはの大部分はC(C++)で作られているのでほとんどの言語がCのメモリ管理を踏襲しています。
CPUやコンパイラによる細かな違いもありますが、大きくは変わらないでしょう。
プログラムがシステムからメモリ上にロードされ動作を開始するタイミングでは大きく分けて4つのメモリ領域が確保(割り当て)されます。
プログラムの命令部分
CPUはここに書かれた命令を一つずつ順番に処理していきます。
稀に、この領域に固定の値が含まれる事があります。(関数のstatic constなローカル変数など)
固定された値
constな変数がここに分類されます。
固定のテーブルなどはココです。
この領域の内容が書き変わる事は無いハズですね。
変数領域
globalな変数の領域です。
関数内のstatic変数やC++のstaticなクラスメンバもココになります。
関数内のstatic変数はコンパイラや最適化具合によって1の内部に分散格納される場合もありますが、場所の問題であって意図としては同じです。
スタック
謎の領域「スタック」です。
基本的に固定された領域ですが、使い方がトリッキーで詳しく説明されない事も多いです。
次回はココにスポットを当てたいと思います。
更に実行時に割り当てられるメモリがあります。
ヒープ領域
mallocやnewなどで実行時に動的に割り当てられるメモリ領域です。
mallocの場合はメモリ確保のイメージがあると思いますが、
newの場合はメモリ確保している印象は希薄だと思います。
また、関数内で宣言したクラスは宣言タイミングでヒープからメモリ確保され、スコープを抜けるタイミングで解放されます。
constructor,destructor(new,delete)がその都度呼ばれている事に注意しないと痛い目を見ます。
自分がプログラムの中で書いたコードや確保したメモリが
どういった役割を持っていて、どのような場所に確保されているか、、、
少しだけイメージできたでしょうか?
値が変更される可能性があるのか無いのか。
静的に確保されるのか動的に確保されるのか。
このあたりの違いがカギになっているようです。
バグが発生した場合の解決の糸口になる事もあるので、少しだけ意識してみるといいでしょう。
さて、今まで説明してきた中で触れていないモノがあります。
「staticでないローカル変数」です。
最適化された場合にはメモリではなくレジスタに割り当てられることも多いですが、
実はのスタックに確保されることがほとんどです。
また、レジスタに割り当てられたとしてもスタックと無縁ではありません。
むしろ密接に関係しています。
次回はこの「スタック」の役割と仕組み、動作にスポットを当てたいと思います。
乞うご期待!
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (4)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (872)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年