红联Linux门户
Linux帮助

Linux c数组大小的限制

发布时间:2016-08-25 09:49:11来源:linux网站作者:我是一个IT小小鸟
由于在处理一个大文件时,需要使用到一个很大的数组。然而,运行是显示报错。
 
include <stdio.h>  
#include <memory.h>  
int main()  
{  
int length = 10000000;  
char block[length];  
memset(block,0,sizeof(block));  
return 0;  
}  
Segmentation fault (core dumped)  
 
后来,在网上发现了原因, 原来是声明数组时保存在栈中,而栈的大小一般只有几M。超过限度,就会溢出。(原因是栈的地址是从高向低的,所以有限度。)  
 
解决办法就是把数据保存在堆上。代码如下:
#include <stdio.h>  
#include <memory.h>  
#include <stdlib.h>  
int main()  
{  
int length = 10000000;  
char *block=NULL;  
block = (char *)malloc(length * sizeof(char));  
memset(block,0,sizeof(block));  
free(block);  
return 0;  
}
 
具体堆和栈的区别,可以参考:Linux C 堆与栈的区别(http://www.linuxdiyf.com/linux/23596.html)。
此外,我检测了下我电脑上栈的最大值为:8M。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/23597.html