今天看了幾篇討論堆和棧的文章,裏面講到棧的默認大小可能是1m,也可能是2m,好奇之下試試。
int main (int argc, char *argv[]) { int tmp[1000*256*2+1000*3] = {0};
}
大概就是2.3m吧,如果再大,就會出現
5 [main] Test 3204 handle_exceptions: Exception: STATUS_STACK_OVERFLOW 28408 [main] Test 3204 open_stackdumpfile: Dumping stack trace to Test.exe.stackdump
環境是Slickedit + gcc.
還可以這樣:
int main (int argc, char *argv[]) { int i; int j; printf("i address %p/r/n",&i); printf("j address %p/r/n",&j);
結果:
i address 0x23eef4 j address 0x23eef0i和j是局部變量,都是在棧裏面分配的。分配時從棧頂開始。所以i的地址就是棧頂啦,
23eef4到0就是整個棧的大小,大概就是2.3m這樣啦.也可以看出,
棧的分配是從高地址(棧頂)到低地址分配的,所以後來分配的j的地址就比i地址小。