Linux的栈大小限制- -
8M,具体的方法如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int buf[2*1024*1024];
printf("Hello,world");
return 0;
}
int main(int argc, char *argv[])
{
int buf[2*1024*1024];
printf("Hello,world");
return 0;
}
运行的时候会SegmentationFault
用GDB调试
08048460 <main>:
8048460: 55 push %ebp
8048461: 89 e5 mov %esp,%ebp
8048463: 81 ec c8 e0 7f 00 sub $0x7fe0c8,%esp
8048469: 83 ec 0c sub $0xc,%esp
804846c: 68 e8 84 04 08 push $0x80484e8
8048471: e8 c6 fe ff ff call 804833c <_init+0x58>
8048476: 83 c4 10 add $0x10,%esp
8048479: b8 00 00 00 00 mov $0x0,%eax
804847e: c9 leave
804847f: c3 ret
8048460: 55 push %ebp
8048461: 89 e5 mov %esp,%ebp
8048463: 81 ec c8 e0 7f 00 sub $0x7fe0c8,%esp
8048469: 83 ec 0c sub $0xc,%esp
804846c: 68 e8 84 04 08 push $0x80484e8
8048471: e8 c6 fe ff ff call 804833c <_init+0x58>
8048476: 83 c4 10 add $0x10,%esp
8048479: b8 00 00 00 00 mov $0x0,%eax
804847e: c9 leave
804847f: c3 ret
出错的时候,程序停在804846c上,也就是说无法PUSH,此时的ESP已经超出了正常的堆栈范围,最后得出的结论:Linux的栈大小是8M,不过是2.4.7内核,不知道别的内核是不是这个样子