现在的位置: 首页 > 综合 > 正文

内存模型

2013年12月02日 ⁄ 综合 ⁄ 共 557字 ⁄ 字号 评论关闭

 

Linux的内存模型,一般为:

地址

作用

说明

>=0xc000 0000

内核虚拟存储器

用户代码不可见区域

<0xc000 0000

Stack(用户栈)

ESP指向栈顶

 

 

 

空闲内存

>=0x4000 0000

文件映射区

 

<0x4000 0000

 

 

 

空闲内存

 

 

Heap(运行时堆)

通过brk/sbrk系统调用扩大堆,向上增长。

 

.data.bss(读写段)

从可执行文件中加载

>=0x0804 8000

.init.text.rodata(只读段)

从可执行文件中加载

<0x0804 8000

保留区域

 

 glibc实现的内存管理算法中,Malloc小块内存是在小于0x4000 0000的内存中分配的,通过brk/sbrk不断向上扩展,而分配大块内存,malloc直接通过系统调用mmap实现,分配得到的地址在文件映射区,所以其地址大于0x4000 0000


全局内存的说明,bssdatarodata:

bss是指那些没有初始化的和初始化为0的全局变量:bss类型的全局变量只占运行时的内存空间,而不占文件空间

data里面存放着数据。当然,如果数据全是零,为了优化考虑,编译器把它当作bss处理:data类型的全局变量是即占文件空间,又占用运行时内存空间的。

rodataro代表read only,即只读数据(const)

 


抱歉!评论已关闭.