c语言编译生成map文件中各段定义说明.text .bss .code .data等

使用BK7258编译生成的size map文件示例图如下:
在这里插入图片描述
.text段 : 指的是代码段+只读数据段
.code段:指的是代码段,就是函数代码
.rodata段:只读数据段,通常保存全局常量(const)、字符串常量
.data段:可读写已初始化数据段,占用ram区域
.bss段:可读写未初始化数据段,通常保存未初始化全局变量(包含全局静态变量)和局部静态变量(static)

dec代表十进制的总大小
hex代表十六进制的总大小

堆:动态分配数据,malloc
栈:局部变量,在函数内部定义的非静态变量(auto)

为什么要把程序的代码段数据段分开存放?
1.当程序被装载后,数据和指令分别被映射到两个虚拟内存区域。数据段对进程来讲是可读写的,而代码段对进程来说是只读的,所以这两个虚拟内存区域的权限可以被分别设置未可读写和只读,防止程序的指令被有意和无意的改写。
2.现在cpu的缓存一般被设计成数据缓存和指令缓存分离,程序的指令和数据被分开存放对cpu的缓存命中率提高有好处。
3.当系统中运行着多个该程序的副本时,例如多个线程同时运行同一个程序,它们的代码段指令都是一样的,所以内存中只需要保存一份该程序的代码段,然后将每个副本进程的数据段区域分来,这样可以节省大量空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值