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

Exa*_*gon 6 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
}
Run Code Online (Sandbox Code Playgroud)

Exa*_*gon 2

我大致是这样解决的:

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 
}
Run Code Online (Sandbox Code Playgroud)

  • 知道为什么必须使用 x86 asm 而不是在堆栈上声明第二个字符并获取其地址,就像使用 STACK_BEGIN 一样吗? (2认同)