メモリ管理(セグメント)
セグメント(セクション)
通常プログラムやデータはメインメモリの連続した領域を単位として管理される。
このプログラムやデータの管理単位となる連続した領域のことをセグメントと呼ぶ。
Programセクション(Pセクション)
プログラムコードが格納されるセクション。Textセクションとも呼ばれるよ。
Constセクション(Cセクション)
定数データが格納されるセクション。
Dataセクション(Dセクション)
初期値ありのグローバル変数が格納されるセクション。
BSSセクション(Bセクション)
初期値なしのグローバル変数が格納されるセクション。
例
以下のサンプルプログラムhello.cでの実行結果を示す。
#include <stdio.h> int main(void) { puts("hello world"); return 0; }
sizeコマンドやobjdumpコマンドでセクションの確認ができる。
$ gcc -c hello.c $ size hello.o text data bss dec hex filename 89 0 0 89 59 hello.o $ size hello text data bss dec hex filename 1182 552 8 1742 6ce hello $ objdump -h hello.o hello.o: ファイル形式 elf64-x86-64 セクション: 索引名 サイズ VMA LMA File off Algn 0 .text 00000015 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 0000000000000000 0000000000000000 00000055 2**0 ALLOC 3 .rodata 0000000c 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .comment 00000035 0000000000000000 0000000000000000 00000061 2**0 CONTENTS, READONLY 5 .note.GNU-stack 00000000 0000000000000000 0000000000000000 00000096 2**0 CONTENTS, READONLY 6 .eh_frame 00000038 0000000000000000 0000000000000000 00000098 2**3 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
プログラム実行時に必要となるメモリ量
静的なメモリサイズと動的なメモリサイズの両方を考慮する必要がある。
- 静的なメモリサイズ(コード・データ)
- 動的なメモリサイズ(スタック・ヒープ等)