C++内存布局

C++内存布局,第1张

C++内存布局中,堆和栈在内存中的关系是怎样的,堆相对栈总是处于低地址区吗?windows linux上布局一样吗?

环境说明

win10 64位, vc6, vs2019, centos7.9 gcc9.3 linux, mint20.2 gcc9.3

遇到问题先搜索一番

基本上都是一样的图示,随便找了两个放在下面。

看到这里似乎脑袋里灵光一闪,内存布局一定是这样的:
  1. 堆相对于栈总是处于低地址区,
  2. 堆上高地址增长
  3. 栈向低地址增长。
实际表现是这样吗

由于平时使用windows,先在windows上验证一下吧。

  • 经典的VC6

啥情况?怎么栈的地址好像比堆的要小呢?一定是VC6这老古董太老了,有bug。

  • VS2019 x86 在新版本上总应该没问题了吧

奇怪了,依旧与网上大神们的图对不上,栈的地址就是比堆要小

  • VS2019 x64 哦,我知道了,现在是64位的天下,谁还看x86的呀,再换x64试试

这下总算与网上大神们的图对上了

  • centos7.9,忽然想到大神们是不是 都不用windows,再看看linux吧

完美匹配,看来大神们一定是用的linux开发学习的

  • linuxmint 20.2(基于ubuntu) linux debian系 redhat系都挺多的,再试试debian系(手头只有虚拟机版本的,凑和用吧)

啥?又与大神们的图对不上了?已经开始晕了

思考一下

win上x86 与x64 不同,linux 同为x64 centos 与 linuxmint(ubuntu) 不同。为什么呢?

其实这是由于内存是由 *** 作系统管理的,具体到内存布局上不同系统会有不同的分配方式,堆和栈及其它代码段数据段等的相对关系不是全部统一的,需要我们区别对待

总结

相信通过这个学习过程,读者已经对内存布局有了更深的理解,再来回顾一下

这个图展示了一种典型的内存布局,读者千万不可认为所有系统上均是如此

那么对我们之前内存布局的理解应修改为

  1. 堆相对于栈不总是处于低地址区,
  2. 堆上高地址增长
  3. 栈向低地址增长。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/713807.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存