C专家编程(3)
段(P117-119)
在一个可执行文件中,主要有三个段:文本段、数据段和bss段。利用size
命令,可以查看这三个段的大小。

编程挑战
size | text | data | bss | total | |
---|---|---|---|---|---|
1 | 16696 | 1566 | 600 | 8 | 2174 |
2 | 16720 | 1566 | 600 | 4032 | 6198 |
3 | 20736 | 1566 | 4616 | 8 | 6190 |
4.1 | 20784 | 1755 | 4624 | 8 | 6387 |
4.2 | 20832 | 1876 | 4632 | 8 | 6516 |
5 | 23440 | 1876 | 4632 | 8 | 6516 |
分析结果可知:
- 数据段保存在目标文件中。(比较2和3的结果可得)
- BSS段不保存在目标文件中。(比较1和2的结果可得)
- a.out文件的大小受调试状态下编译的影响,但段不受影响。
- 文本段易受优化措施影响。
段错误(P159-163)
可能导致段错误的常见编程错误是:
- 坏指针值错误:在指针赋值前就用它来引用内存/向库函数传递一个坏指针/释放指针后再访问它的内容。
- 改写(overwrite)错误:越过数组边界/在动态分配的内存两端写入数据/改写一些堆管理数据结构。
- 指针释放引起的错误:释放同一个内存块两次/释放未曾使用malloc分配的内存/释放仍在使用的内存/释放无效指针。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xiaowei's Blog!
评论