Linuxer.
全部博文(199)
分类: LINUX
2013-07-11 14:15:37
这几天需要对一个百万量级语料库进行统计,为了充分利用实验室的服务器优势,不得不换用Linux上的C++编程。以前经常用C#进行编程,C++也学过,但C++编程只是学习性质,之多写个简单的数据结构。这次真正做个统计遇到了很多问题。
由于数据量比较大,再读取过程中遇到了”Segmentation fault“错误。在此总结一下,希望对大家有所帮助
1:Linxu程序的结构
在Linux系统下,程序是个普通的可执行文件,用size命令可以列出文件的结构。比如:size read ,现实以下数据
text data bss dec hex filename
3905 364 152 4421 1145 read
其中,text是代码区(text segment),用来存放CPU执行的指令,代码区是共享的。
dada是数据区(data segment),用来存贮在程序中明确被初始化的全局变量 ,已经出初始化的静态变量 。
bss区(Block Started by Symbol),存入的是全局未初始化变量 和未初始化的静态变量 。
2:错误原因
2.1 数组初始化空间过大
在我的程序中,由于数据量在2百万多汉字,所以一开始初始化内存为1024*1024*20。结果一直出现”Segmentation fault“错误。在我的实验中把数据大小改为1024*1024*9时(Ubuntu10.04,gcc version 4.4.3 ),不会出现错误。如果1024*1024*10就报错。内存初始化大小可以自己定义,这是利用系统默认的分配方式。