C语言程序是编译后的二进制程序,其对目标操作系统依赖性非常强,如:Linux程序无法在Windows系统上直接运行,反之亦然,再如:64位程序无法允许在32位系统。对于C语言程序的内存存储空间的布局,还是需要了解一下的。
C语言程序主要分为:正文段,初始化数据段,非初始化数据段,栈,堆等。
正文段:CPU执行机器指令的部分,该段是只读的。
初始化数据段:简称数据段,已初始化的变量(全局,静态局部变量)。
非初始化数据段:简称bss段,这段在二进制可执行文件中不存在,未初始化的(全局,静态变量)。
栈:局部变量,函数调用所保存的信息(如寄存器值)等都保存在栈中。
堆:动态分配的内存,如用malloc,realloc等申请的内存,使用后必须手动释放。
说明:
局部变量是在运行时创建的,他们并不进入a.out
数据段保存在目标文件中
BSS段不保存在目标文件中(除了记录BSS段在运行至所需要的大小)
文本段最容易受优化措施影响
a.out文件的大小受调试状态下变异的影响,但段不受影响
nm -sx a.out命令可查看a.out各段
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。