在C ++程序中确定运行时的堆栈大小

时间:2016-03-28 13:14:51

标签: c++ stack runtime c++14

我想知道是否有一种方法可以用编程方式确定C ++中正在运行的程序的堆栈大小。如果是这样,是否还有一种方法可以以编程方式确定程序在运行时使用的堆内存量?为了确定堆的大小,我可以通过重载newdelete运算符来看到一种潜在的方法,但我认为这不适用于智能指针。

我试图通过以下方式实现它:

int main(){
    const char STACK_BEGIN = 'A';
    //a lot of code
    register unsigned long int STACK_NOW asm("%esp");
    long long int stack_size = (reinterpret_cast<int>(&STACK_BEGIN) - STACK_NOW);
    //rest of code
}

2 个答案:

答案 0 :(得分:1)

首先,栈是线程的一个属性,每个线程都有自己的栈。 由于线程是平台提供的,系统接口可能提供也可能不提供。
对于 Linux,这是函数 pthread_attr_getstacksize()

如果另外你想得到实际的地址范围,你可以从 STACK_BEGIN 和处理器架构约定中得到这个,栈是自顶向下的,即 STACK_BEGIN 实际上在顶部,底部大约在 {{1} }.

对于 Windows,堆栈范围隐藏在 STACK_BEGIN-´size of the stack´ 中,请参阅 processhacker

答案 1 :(得分:0)

我大概解决了这个问题:

int main(){ 
    const char STACK_BEGIN = 'A'; //a lot of code 
    register unsigned long int STACK_NOW asm("%esp"); 
    long long int stack_size = (reinterpret_cast<int>(&STACK_BEGIN) - STACK_NOW); //rest of code 
}