我可以在C/C++中获得堆栈的限制吗?

rev*_*rev 23 c c++ visual-c++

我的问题很简单明了:如果我有1MB的RAM分配给程序的堆栈,我可以获得开始和结束的地址,或者开始和长度吗?

我正在使用Visual Studio 2013.

Ben*_*igt 30

你应该质疑你对堆栈布局的假设.

也许堆栈不只有一个顶部和底部

也许它没有固定的底部

显然,没有可移植的方法来查询不可移植的概念.

但是,从Visual C++,您可以使用Win32 API,具体取决于Windows版本.

在Windows 8上,它非常简单,只需调用即可 GetCurrentThreadStackLimits

早期版本需要VirtualQueryEx稍微使用和处理结果.在堆栈中获取一个地址很简单,只需&在局部变量上使用即可.然后,您需要找到包含该地址的保留区域的限制.Joe Duffy撰写了一篇博客文章,展示了查找堆栈底部地址的详细信息


E. *_*fat 9

GetCurrentThreadStackLimits 似乎做你正在寻找的东西,使堆栈的下/上边界成为指针地址:

ULONG_PTR lowLimit;
ULONG_PTR highLimit;
GetCurrentThreadStackLimits(&lowLimit, &highLimit);
Run Code Online (Sandbox Code Playgroud)

看起来它仅适用于Windows 8和Server 2012.

检查MSDN