环境说明C++内存布局中,堆和栈在内存中的关系是怎样的,堆相对栈总是处于低地址区吗?windows linux上布局一样吗?
win10 64位, vc6, vs2019, centos7.9 gcc9.3 linux, mint20.2 gcc9.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) 不同。为什么呢?
其实这是由于内存是由 *** 作系统管理的,具体到内存布局上不同系统会有不同的分配方式,堆和栈及其它代码段数据段等的相对关系不是全部统一的
,需要我们区别对待
相信通过这个学习过程,读者已经对内存布局有了更深的理解,再来回顾一下
这个图展示了一种典型
的内存布局,读者千万不可认为所有系统上均是如此
那么对我们之前内存布局的理解应修改为
- 堆相对于栈
不总是
处于低地址区, - 堆上高地址增长
- 栈向低地址增长。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)