【发布时间】:2017-09-18 19:47:28
【问题描述】:
当我使用调试器找出变量的内存地址时, 我得到类似 0x602010 或 0x7ffffffffe0d8 的信息。
一个属于堆内存,一个属于栈内存。
第一个是堆内存地址,后一个是栈内存地址。 我知道这一点,因为第一个是 malloc() 的地址,第二个是局部变量的内存地址。
我很想知道是否有一种方法可以仅通过查看某个地址的内存地址就知道某个地址属于堆栈还是堆。
【问题讨论】:
-
用地图文件生成编译它并查看它。
-
“我知道这一点,因为第一个是 malloc() 的地址,第二个是局部变量的内存地址。” 哇,等等。不计算。您无法保证 “一个属于堆内存,另一个属于堆栈内存。” 这只是一个疯狂的假设。最好首先避免这个要求。为什么你认为你需要知道这一点? C++ 是一种抽象;抽象中的代码,你会没事的。
-
@SeekAddo: "malloc 分配是堆内存" 这是一个严重的过度简化,并不总是正确的。这整个“堆栈与堆”的事情需要消亡!
-
没关系。这是隐藏在动态内存抽象背后的一些实现细节。
-
@Nguaial:如果它愿意,它可以从我的袜子中分配