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


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

内存管理 C++

来自死亡战线的 12 years, 9 months ago

查了一下,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平台。

爱神-尤贝尔 answered 12 years, 9 months ago

Your Answer