segment
在GDB调试中,经常会出现SIGSEGV(段错误),首先来了解一下什么是段。
对于C文件,编译后形成的二进制文件包括的内容与操作系统有关。Unix/Linux用的是ELF格式,DOS下是COFF格式,这些格式不尽相同,但是都有一个共同的概念—–段。
bluephantom@bluephantom-Vostro-5568:~/文档$ size a.out
text data bss dec hex filename
2105 624 8 2737 ab1 a.out
段是指二进制文件内的区域,很多信息存储在内。可以通过size(MinGW的Command)查看各个段的大小,text段(正文段,用于存储指令),data(数据段,存储已初始化的全局变量),BSS段(存储未赋值的全局变量)。
对于调用栈,它是在运行时创建,称为堆栈段。堆栈段也有自己的大小,不能被越界访问,否则会出现段错误。(栈溢出)
因此,可以说,段错误很大程度是越界,过大!
在Linux,通过ulimit指定,ulimit -a:查看栈的大小;还可以进行修改。
在Windows,栈的大小存储在可执行文件中。
它们都可以在编译的时候通过gcc进行修改。
相关阅读
点击打开链接segment fault类的错误本质原因就是程序访问了非法的地址:1.引用空指针2.野指针3.访问越界造成的原因有多种:主观原因:1
当我们谈论“细分”(segmentation)的时候我们在谈论什么
关键词(Key words):细分(segmentation),客户细分(customer segmentation),市场细分(market segmentation),客户肖像(persona),市场定位(Market