Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1753875
  • 博文数量: 199
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 6186
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-30 11:01
个人简介

Linuxer.

文章存档

2015年(4)

2014年(28)

2013年(167)

分类: 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就报错。内存初始化大小可以自己定义,这是利用系统默认的分配方式。

阅读(4309) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~