是否可以在编译C ++代码期间报告每个模块的堆栈使用情况?

时间:2015-08-10 23:01:44

标签: c++ systemc

我正在使用modelsim进行混合语言模拟,部分代码是用SystemC(C ++)编写的,然后当我使用SystemC代码时,我得到了堆栈溢出。我不确定如何追踪这个问题。只想检查在编译C ++代码期间是否可以报告堆栈使用情况?

2 个答案:

答案 0 :(得分:1)

编译器无法准确判断出最大堆栈大小的多少,因为它取决于很多东西。如果你有一个递归,编译器不能预测输入是什么,如果你有线程,那么将有更多的单个堆栈,依此类推。

如何追踪? 对于每个代码块,这是堆栈帧:从当前函数中第一个变量的地址开始,注意第一个变量可以是by值参数(不是通过引用),first或last,具体取决于调用约定,当前块中最后一个声明的变量,加上最后一个变量的size。在帧之前有返回值(类型大小)和返回地址(指针大小),因此您可以知道每个函数在堆栈上占用的字节数,当前帧可以与第一个主要(或线程条目)进行比较变量地址,以便在接近极限时提醒您。请注意,线程堆栈通常具有与主线程不同的堆栈大小。

答案 1 :(得分:0)

在非递归函数中,是:只需将参数和局部变量的大小相加,并为返回地址和基指针添加一对或多个单词。

在递归函数中,一般情况下是不可能的,尽管递归是基于可以在编译时评估的条件,但在有限的情况下可能是可行的。

我不知道有任何编译器会这样做。