[C言語]変数がメモリ上にどのように領域確保されているかを見てみる

猫でもわかるC言語第7章より

printf("%p",&a)のようにすると変数のアドレスを表示することができます。
/* show pointer address */
#include <stdio.h>

int main()
{
    double d3,d2,d1;
    int    i3,i2,i1;
    char   c3,c2,c1;
    
    printf("address of c1 is %p\n", &c1);
    printf("address of c2 is %p\n", &c2);
    printf("address of c3 is %p\n", &c3);
    printf("address of i1 is %p\n", &i1);
    printf("address of i2 is %p\n", &i2);
    printf("address of i3 is %p\n", &i3);
    printf("address of d1 is %p\n", &d1);
    printf("address of d2 is %p\n", &d2);
    printf("address of d3 is %p\n", &d3); 
}
実行結果
Windows7 32bit, gccでコンパイル・実行してみました。
address of c1 is 0022FEF9
address of c2 is 0022FEFA
address of c3 is 0022FEFB
address of i1 is 0022FEFC
address of i2 is 0022FF00
address of i3 is 0022FF04
address of d1 is 0022FF08
address of d2 is 0022FF10
address of d3 is 0022FF18
それぞれのアドレスの差分を見ると、
charは1バイト
intは4バイト
dobuleは8バイト
になっていることがわかりました。

また、変数がメモリ上に隙間なく並んでいる様子もわかります。
カテゴリ:

人気記事