メモリとセグメント

プログラムはメモリをセグメントよばれる領域に分割してデータを格納しています。

セグメントには、

○スタックセグメント
ローカル変数、引数が収める

○データセグメント
グローバル変数を収める

○テキストセグメント(コードセグメント)
プログラムのコード部分を収める

の三つの種類があります。

下のプログラムは三つのセグメントのアドレスの具体例を表示させるものです。



#include<stdio.h>

int A,B;

int main(void)
{
        int a,b;
        printf("###ローカル変数はスタックセグメント格納###\n");
        printf("a       = %p\n", &a);
        printf("b       = %p\n", &b);
        printf("###グローバル変数はデータセグメント格納###\n");
        printf("A       = %p\n", &A);
        printf("B       = %p\n", &B);
        printf("###関数はテキストセグメント(コードセグメントへ格納)###\n");
        printf("printf  = %p\n", printf);
        printf("main    = %p\n", main);
        return 0;
}

実行例

###ローカル変数はスタックセグメント格納###
a = 0xbf832c3c
b = 0xbf832c38
###グローバル変数はデータセグメント格納###
A = 0x804a020
B = 0x804a024
###関数はテキストセグメント(コードセグメントへ格納)###
printf  = 0x8048318
main    = 0x80483f4