代码之家  ›  专栏  ›  技术社区  ›  dicroce

GCC是否支持查询堆栈的当前范围?

  •  2
  • dicroce  · 技术社区  · 14 年前

    我想知道是否有可能确定一个给定的地址是在堆栈上还是在堆中。我之所以这样做是因为我们使用的引用计数系统有一个缺陷,即如果智能指针以某种方式指向堆栈上的对象,则会发生不好的事情。如果我有这个功能,我可以用它来尽早检测这个错误情况并抛出,这样做的开发人员将被迫立即处理这个问题。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Eugene Smith    14 年前

    任何解决方案都必须是特定于平台的。在Windows中,可以使用HeapWalk枚举堆中的所有内存块。在Unix中,可以尝试使用pthread\u attr\u getstack()。

        2
  •  2
  •   dan04    14 年前

    您的问题的直接答案是GCC支持内联汇编语言,它允许您将指针与堆栈指针进行比较。

    forcing your objects to be heap-allocated 所以你一开始就不会有这个问题。

        3
  •  1
  •   Billy ONeal IS4    14 年前

    不,这是 建议你不要那样做。)计算机科学课程中对堆栈和堆的典型解释与实际系统(使用虚拟内存)的运行方式几乎没有共同之处。

    一般来说不值得。(如果是, std::auto_ptr , std::unique_ptr ,或 boost::shared_ptr ,或 boost::scoped_ptr