Linux C/C++中”Segmentation fault“总结

来源:互联网 发布:焓湿图软件 编辑:程序博客网 时间:2024/05/17 08:22

       这几天需要对一个百万量级语料库进行统计,为了充分利用实验室的服务器优势,不得不换用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就报错。内存初始化大小可以自己定义,这是利用系统默认的分配方式。

原创粉丝点击