1 #include <stdio.h> 2 3 int main(void) 4 { 5 int hoge; 6 7 hoge=0x1234abcd; 8 printf("Hello world!\n"); 9 10 printf("adress main:%p\n", main); 11 printf("adress hoge:%p\n", &hoge); 12 13 return 0; 14 }
Hello world! adress main:0x80483b4 adress hoge:0xbfacb7d0
なぜ,ローカル変数のみ特別なのであろうか? ローカル変数は関数が呼び出されたときの みメモリーが割り当てられる.関数が呼ばれていないときにはメモリーが割り当てられて いないのである.このようにすることにより,必要な時のみメモリーを割り当てることあ でき,効率的にメモリーを使うことができる.また,再帰関数が可能となる.必要な時に メモリーを割り当てることにより,再帰呼び出しを行っても,追加でメモリーの確保がで きる.
中間試験の後に学習することになるが,ローカル変数のメモリー割り当てにはスタックと
呼ばれる仕組みが使われている.このようなことから,ローカル変数の領域をスタッ
ク領域と呼ばれる.また,プログラムの関数が格納される領域をコード領域,グ
ローバル変数や文字列定数が格納される領域をデータ領域と言う.本日の講義の後
半で述べるmalloc()により確保されるメモリー領域をヒープ領域と言う.
1 #include <stdio.h> 2 3 void prt(char *c); 4 int main(void) 5 { 6 static int si=9999; 7 int i=8888; 8 9 printf("main\t%p\t\n", main); 10 printf("prt\t%p\t\n", prt); 11 printf("%d\t%p\n", si, &si); 12 printf("%d\t%p\n", i, &i); 13 prt("HELLO"); 14 15 return 0; 16 } 17 18 void prt(char *c) 19 { 20 21 printf("%s\t%p\n",c,c); 22 }
main 0x8048384 prt 0x8048415 9999 0x8049620 8888 0xbff44440 HELLO 0x804850e