栈是由编译器自动管理的,通常程序员不需要关注。但是如果程序中分配了大量数组和递归函数层次太深,则会导致栈空间不够用。Linux下通常会报“Segmentation fault”的错误信息。
对栈的空间大小有限定, Linux下可以通过ulimit查看和修改。针对ulimit命令的使用可以参见:http://www.diybl.com/course/6_system/linux/linuxjq/20081117/151630.html
[root@sclab-9 ~]# ulimit -s
8192
[root@sclab-9 ~]# uname -a
Linux sclab-9 2.6.25.20bti #10 SMP Wed Sep 9 19:31:32 PDT 2009 x86_64 x86_64 x86_64 GNU/Linux
[root@sclab-9 ~]# ulimit -s 81920
[root@sclab-9 ~]# ulimit -s
81920
下面是一个进行栈测试的小程序,通过递归的方式测试栈空间的大小。
// Test co
#include <stdio.h>
#include <pthread.h>
int i = 0;
void * test(void * s)
{
int buffer[1024];
printf("i=%d\n", i);
i++;
buffer[0]=i;
test(s);
}
int main()
{
pthread_t p;
pthread_create(&p, NULL, &test, NULL);
sleep(100);
}