我使用的是VC++ 2012。
我希望能够知道当前线程中有多少堆栈内存可用。
快速搜索指向使用 malloc.h 和 stackavail() 函数,但它在 Visual C++ 2012 中不存在。我如何以另一种方式实现这一点?
有问题的例子是这样的:
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
using namespace std;
int _tmain()
{
cout << "Available stack: " << stackavail() << std::endl;
}
这使用了一些堆栈,但是线程安全的,并且不需要 asm 内联。我认为我们这些需要跟踪堆栈的人不需要精度。只是对可用于防止发生溢出的方法的良好估计。我们需要跟踪它,因为我们为用户提供了创建可能使用递归或其他服务或需求的宏、脚本、表达式等的能力。每个环境都应该能够报告堆栈可用性,即使它只使用所有可用内存,以便可以控制任何递归。
size_t stackavail()
{
// page range
MEMORY_BASIC_INFORMATION mbi;
// get range
VirtualQuery((PVOID)&mbi, &mbi, sizeof(mbi));
// subtract from top (stack grows downward on win)
return (UINT_PTR) &mbi-(UINT_PTR)mbi.AllocationBase;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)