关于内存布局的疑惑

yangkunhenry 2019-12-26 12:02:10
在某一本书上有这样的说法,内存的布局在图上有画出来


关于内存中堆区和栈区的分布,以及全局区和代码区的分布,我重新找了下,有这样的


到底哪种是准确的呢?
或者是不同的平台有不同的布局?
和平台或者编译器有关?
...全文
239 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangkunhenry 2020-03-27
  • 打赏
  • 举报
回复
引用 8 楼 scutth 的回复:
关于这方面的问题,建议你读程序员的自我修养 链接装载与库,这本书讲的非常详细
多谢了!
scutth 2020-03-26
  • 打赏
  • 举报
回复
关于这方面的问题,建议你读程序员的自我修养 链接装载与库,这本书讲的非常详细
yangkunhenry 2020-03-26
  • 打赏
  • 举报
回复
引用 4 楼 行走的红茶 的回复:
两个说法都没有问题,栈数据是大地址开始,向小地址增,堆跟内存一样,开始于小地址,随着使用数量增长,地址向大地址变化。
嗯,是的,没有问题。我看错了。谢谢了! 另外你说的 “堆跟内存一样" ,哈哈哈,堆不就是内存一部分吗。哈哈
yangkunhenry 2020-03-26
  • 打赏
  • 举报
回复
引用 3 楼 scutth 的回复:
这个跟编译器没有关系,内存布局是runtime的,只跟操作系统有关系。每一个process的virtual address space都是固定模式,哪些地址段存放哪些东西是OS自己决定的,第一张图是比较全面的,第二张图比较简略,按照第一张图理解。另外,编译器能决定的是静态binary的存储,load进memory之后就是另外一码事。
第二个也对的,我看错了,唉,上面是high address.... 谢谢了 有时候一个人看久了,真的会陷进去,讨论还是会带来些不一样的东西
yangkunhenry 2020-03-26
  • 打赏
  • 举报
回复
引用 3 楼 scutth 的回复:
这个跟编译器没有关系,内存布局是runtime的,只跟操作系统有关系。每一个process的virtual address space都是固定模式,哪些地址段存放哪些东西是OS自己决定的,第一张图是比较全面的,第二张图比较简略,按照第一张图理解。另外,编译器能决定的是静态binary的存储,load进memory之后就是另外一码事。
只是全面和简略的区别吗?感觉第二张是错误的吧。 编译器能决定的是静态binary的存储,load进memory之后就是另外一码事。 感谢感谢!仔细品味下确实是,又学到了!真是茅厕顿开啊!
fly 100% 2020-03-26
  • 打赏
  • 举报
回复
两个说法都没有问题,栈数据是大地址开始,向小地址增,堆跟内存一样,开始于小地址,随着使用数量增长,地址向大地址变化。
scutth 2020-03-25
  • 打赏
  • 举报
回复
这个跟编译器没有关系,内存布局是runtime的,只跟操作系统有关系。每一个process的virtual address space都是固定模式,哪些地址段存放哪些东西是OS自己决定的,第一张图是比较全面的,第二张图比较简略,按照第一张图理解。另外,编译器能决定的是静态binary的存储,load进memory之后就是另外一码事。
yangkunhenry 2019-12-26
  • 打赏
  • 举报
回复
两种关于堆区和栈区的分布不一样?这个和什么有关系?
yangkunhenry 2019-12-26
  • 打赏
  • 举报
回复
刚看了一份map文件,看到也有这样的 低地址到高地址依次是:
/*
 * 0x20000000		
 * 				.data
 * 				.bss
 * 				.heap
 * 				.stack
 * 0x20008000
 */
估计和编译器有关系吧,编译器根据自己的算法去对不同的段做不同的布局吧

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧