【问题标题】:How to find out if the memory belongs to heap or stack? [duplicate]如何判断内存是属于堆还是栈? [复制]
【发布时间】:2017-09-18 19:47:28
【问题描述】:

当我使用调试器找出变量的内存地址时, 我得到类似 0x602010 或 0x7ffffffffe0d8 的信息。

一个属于堆内存,一个属于栈内存。

第一个是堆内存地址,后一个是栈内存地址。 我知道这一点,因为第一个是 malloc() 的地址,第二个是局部变量的内存地址。

我很想知道是否有一种方法可以仅通过查看某个地址的内存地址就知道某个地址属于堆栈还是堆。

【问题讨论】:

  • 用地图文件生成编译它并查看它。
  • “我知道这一点,因为第一个是 malloc() 的地址,第二个是局部变量的内存地址。” 哇,等等。不计算。您无法保证 “一个属于堆内存,另一个属于堆栈内存。” 这只是一个疯狂的假设。最好首先避免这个要求。为什么你认为你需要知道这一点? C++ 是一种抽象;抽象中的代码,你会没事的。
  • @SeekAddo: "malloc 分配是堆内存" 这是一个严重的过度简化,并不总是正确的。这整个“堆栈与堆”的事情需要消亡!
  • 没关系。这是隐藏在动态内存抽象背后的一些实现细节。
  • @Nguaial:如果它愿意,它可以从我的袜子中分配

标签: c++ c memory


【解决方案1】:

一般?没有。

并非每个实现都有一个堆,或者有一个被malloc() 使用。并不是每个局部变量都在“堆栈”上。这些是硬实施细节。

使用特定系统的文档来确定满足您目标的规则集是可能的,但由于您使用 C++ 进行编程,因此要好得多完全不这样做.相反,请关注程序的高级语义。让编译器和实现来处理剩下的事情;确实,这是他们的工作。

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 2015-07-21
    • 2018-05-25
    • 2011-08-25
    • 2018-02-04
    • 1970-01-01
    • 2012-08-10
    • 2010-11-24
    • 2012-07-29
    相关资源
    最近更新 更多