linux内存分配缺陷,关于Linux内存分配的一个问题__Private_Clean_Private_Dirty_mytestApp_Shared_Clean_Shared_Dirty__169IT...

请教大家一个问题,程序运行时,什么样的代码会被分配到00502000-01542000(标记为heap)的内存空间?

另外,标记为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

这里大概是代码段,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 栈

|

嵌入式,貌似应用范围比较广

只做过行业应用软件,后台服务程序

没有接触过嵌入式..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值