<分区>
我用modelsim做混合语言仿真,部分代码是用SystemC(C++)写的,然后用SystemC代码就出现栈溢出。我不确定如何追踪这个问题。只是想检查是否可以在编译 C++ 代码期间报告堆栈使用情况?
<分区>
我用modelsim做混合语言仿真,部分代码是用SystemC(C++)写的,然后用SystemC代码就出现栈溢出。我不确定如何追踪这个问题。只是想检查是否可以在编译 C++ 代码期间报告堆栈使用情况?
最佳答案
编译器无法准确判断最大堆栈大小是多少,因为它取决于很多因素。如果你有一个递归,编译器无法预测输入是什么,如果你有线程,那么会有多个堆栈,等等。
如何追踪? 对于每个代码块,这是堆栈帧:从当前函数中第一个变量的地址,请注意第一个变量可能是按值参数(不是按引用),第一个或最后一个,取决于调用约定,到当前 block 中最后声明的变量加上最后一个变量的大小。在帧之前有返回值(类型大小)和返回地址(指针大小),所以你可以知道每个函数在堆栈上占用了多少字节,当前帧可以与第一个主(或线程入口)进行比较当您接近限制时,可变地址会提醒您。请注意,线程堆栈通常与主线程具有不同的堆栈大小。
关于c++ - 是否可以在编译 C++ 代码期间报告每个模块的堆栈使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930541/