当前位置: 技术问答>linux和unix
关于Linux内存分配的一个问题
来源: 互联网 发布时间:2016-10-07
本文导语: 请教大家一个问题,程序运行时,什么样的代码会被分配到00502000-01542000(标记为heap)的内存空间? 另外,标记为heap,stack,/tmp/mytestApp以及没有任何标记的区域,都是属于什么空间的? 我只知道heap是堆,stack是栈...
请教大家一个问题,程序运行时,什么样的代码会被分配到00502000-01542000(标记为heap)的内存空间?
另外,标记为heap,stack,/tmp/mytestApp以及没有任何标记的区域,都是属于什么空间的?
我只知道heap是堆,stack是栈,其余的就不清楚了。
另外,标记为heap,stack,/tmp/mytestApp以及没有任何标记的区域,都是属于什么空间的?
我只知道heap是堆,stack是栈,其余的就不清楚了。
# cat /proc/23985/smaps
00400000-004f8000 r-xp 00000000 00:0c 1251 /tmp/mytestApp
Size: 992 kB
Rss: 688 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 688 kB
Private_Dirty: 0 kB
004f8000-00502000 rw-p 000f8000 00:0c 1251 /tmp/mytestApp
Size: 40 kB
Rss: 36 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 24 kB
Private_Dirty: 12 kB
00502000-01542000 rwxp 00502000 00:00 0 [heap]
Size: 16640 kB
Rss: 5228 kB
Shared_Clean: 1468 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 3760 kB
……………………………………………………(此处省略若干文字)
2b249000-2b24a000 ---p 2b249000 00:00 0
Size: 4 kB
Rss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
2b24a000-2b349000 rw-p 2b24a000 00:00 0
Size: 1020 kB
Rss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
7f962000-7f977000 rwxp 7f962000 00:00 0 [stack]
Size: 84 kB
Rss: 40 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 40 kB
|
malloc 申请的内存放在堆
另外,通过属性(权限、主次设备号)来判断,
00400000-004f8000 r-xp 00000000 00:0c 1251 /tmp/mytestApp
---只读可执行私有,是程序本身代码段
004f8000-00502000 rw-p 000f8000 00:0c 1251 /tmp/mytestApp
--可读写私有不可执行,是程序的数据段
2b24a000-2b349000 rw-p 2b24a000 00:00 0
我也不知
另外,通过属性(权限、主次设备号)来判断,
00400000-004f8000 r-xp 00000000 00:0c 1251 /tmp/mytestApp
---只读可执行私有,是程序本身代码段
004f8000-00502000 rw-p 000f8000 00:0c 1251 /tmp/mytestApp
--可读写私有不可执行,是程序的数据段
2b24a000-2b349000 rw-p 2b24a000 00:00 0
我也不知
|
00400000-004f8000 r-xp 00000000 00:0c 1251 /tmp/mytestApp
这里大概是代码段,r-x 可读可执行,不可写
004f8000-00502000 rw-p 000f8000 00:0c 1251 /tmp/mytestApp
这里大概是数据段,保存全局变量,rw- 可读可写,不可执行
一般来说,一个程序的内存,从低到高分为:
text 代码段
rodata 常量区(Read Only),比如常量字符串
data 数据段,有初值的全局变量,比如 int a=10;
bss 数据段,无初值的全局变量,比如 int b; 这部分在可执行文件里没有,运行的时候由系统加载并初始化为0
heap 堆
stack 栈
这里大概是代码段,r-x 可读可执行,不可写
004f8000-00502000 rw-p 000f8000 00:0c 1251 /tmp/mytestApp
这里大概是数据段,保存全局变量,rw- 可读可写,不可执行
一般来说,一个程序的内存,从低到高分为:
text 代码段
rodata 常量区(Read Only),比如常量字符串
data 数据段,有初值的全局变量,比如 int a=10;
bss 数据段,无初值的全局变量,比如 int b; 这部分在可执行文件里没有,运行的时候由系统加载并初始化为0
heap 堆
stack 栈
|
嵌入式,貌似应用范围比较广
只做过行业应用软件,后台服务程序
没有接触过嵌入式..
只做过行业应用软件,后台服务程序
没有接触过嵌入式..