棧的默認大小

今天看了幾篇討論堆和棧的文章,裏面講到棧的默認大小可能是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 0x23eef0
i和j是局部變量,都是在棧裏面分配的。分配時從棧頂開始。所以i的地址就是棧頂啦,

23eef4到0就是整個棧的大小,大概就是2.3m這樣啦.也可以看出,

棧的分配是從高地址(棧頂)到低地址分配的,所以後來分配的j的地址就比i地址小。



發佈了42 篇原創文章 · 獲贊 0 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章