可能重複:
Getting a stack overflow exception when declaring a large array一個奇怪的分段錯誤
我的系統是x86-64 linux
這裏是我的簡單代碼:
#include<stdio.h>
#define N 1024
int main()
{
int a[N][N];
int b[N][N];
printf("hello world\n");
return 0;
}
而且從objdump的它的彙編代碼:
00000000004004fc <main>:
4004fc: 55 push %rbp
4004fd: 48 89 e5 mov %rsp,%rbp
400500: 48 81 ec 00 00 80 00 sub $0x800000,%rsp
400507: bf c4 05 40 00 mov $0x4005c4,%edi
40050c: e8 cf fe ff ff callq 4003e0 <[email protected]>
400511: b8 00 00 00 00 mov $0x0,%eax
400516: c9 leaveq
400517: c3 retq
400518: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
40051f: 00
奇怪的是這一計劃將打破調用printf()
功能時。但是,如果我將N定義爲512,則此程序運行良好。我不知道爲什麼。是否有任何堆棧大小限制,限制堆棧使用內存?
有人知道爲什麼嗎?謝謝。
有點諷刺在StackOverflow上問這個問題 – Nemo
'ulimit -s'的輸出是什麼? – ThiefMaster
把a'和'b' *定義在外面怎麼樣? –