C++-如何判断指针指向的是堆内存还是栈内存

发布于 2016-11-14 10:46:39 字数 195 浏览 1145 评论 2

由问题@堆和栈访问效率哪个更高想到的,如何判断一个指针指向的存储是在栈上还是在堆上呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-03-12 14:46:25

查了一下,win平台debug模式下可以使用_CrtIsValidHeapPointer.
也可以借助TIB使用如下方法:

bool IsMemoryOnStack( void* p )
{
void* dwStackTop = 0;
void* dwStackLowCurrent = 0;
__asm {
mov EAX, FS:[4]
mov dwStackTop, eax
mov EAX, FS:[8]
mov dwStackLowCurrent, eax
}

return ( p<= dwStackTop && p>= dwStackLowCurrent );
}

不过两种方式似乎都限于win平台。

想挽留 2017-01-31 12:58:46

有一个思路是在判断的地方再申请两个指针,使指针B指向栈内存,指针C指向堆内存,假如待判断的指针为A,如果A地址大于B,则A指向的是栈内存,若A地址小于C,则A指向的内存是堆内存。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文