ローカル変数、グローバル変数?プログラム上のスタック空間の最大値を探せ!


最近、プログラムやメモリに関する資料を見ました.
おもしろいです.
グローバルデータとローカル変数のメモリ関係を表すことができて、私はCygwinの上で走ってきた結果、STACKの空間は2 Mしかなくて、使い終わった後にプログラムは実行を停止して、ソースコードは以下の通りです:
filename : DepleteStackSize.c
 
#include <stdio.h>


static long STACK_BLOCK_HEADER;

void depleteStackSpace() {
// declare local variable for booking some STACK spaces.
int intVarInStackSpace = 0;
// output the memory offset
printf("%3.1fM
", (STACK_BLOCK_HEADER - (long)(&intVarInStackSpace)*1.0)/(1024*1024));
// self recursive
depleteStackSpace();
}

int main() {
// the first local variable in application memory.
int intVarInStackSpace = 0;
// get first local variable address as the STACK block header
STACK_BLOCK_HEADER = (long)(&intVarInStackSpace);
// perform depletion
depleteStackSpace();
// out the normal exit message
printf("normal exit.
");
}

CygwinでgccでWin 32プログラムにコンパイル:
[root@sharkwang Temp] # gcc -mno-cygwin -o DepleteStackSize.exe DepleteStackSize.c
実行結果は次のとおりです.
2.0M2.0M2.0 M<---%3.1 fはフォーマット後は四捨五入されているため、1.5 xM以上は2.0 M 2となる.0M2.0M2.0M2.0 M<---最大空間になるとプログラムは停止し、Normal Exitの出力は見えません...[root@sharkwang Temp] #