C++-如何判断指针指向的是堆内存还是栈内存
由问题@堆和栈访问效率哪个更高想到的,如何判断一个指针指向的存储是在栈上还是在堆上呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
由问题@堆和栈访问效率哪个更高想到的,如何判断一个指针指向的存储是在栈上还是在堆上呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
查了一下,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平台。
有一个思路是在判断的地方再申请两个指针,使指针B指向栈内存,指针C指向堆内存,假如待判断的指针为A,如果A地址大于B,则A指向的是栈内存,若A地址小于C,则A指向的内存是堆内存。