SystemC sc_signal数组内存边界

SystemC sc_signal array memory bounds

本文关键字:内存 边界 数组 signal sc SystemC      更新时间:2023-10-16

我一直在尝试使用SystemC规范制作一组信号,但在特定的意外情况下遇到了一些分段错误。这让我相信,对于使用SystemC可以拥有的变量数量,存在某种内存限制,我有兴趣确认这一点,并找到解决方案。

考虑以下sc_main函数示例:

sc_main(int argc, char* argv[]) {
sc_signal<float>    values[100];
return 0;
}

这台运行得非常好。但是,当我运行下面的代码时。。。

sc_main(int argc, char* argv[]) {
sc_signal<float>    values[100][800];
return 0;
}

我有一个分段错误:11。(80000个信号(

我进一步发现,我在40000个信号下不会出错,所以在40000到50000之间一定有某种界限。有人能证实这确实是应该发生的事情吗?或者有人知道我如何绕过这个限制,并获得更多的信号吗?

在64位Linux上,sizeof(sc_signal<float>)是192字节。默认堆栈大小为8M字节。因此,您可以在堆栈上分配大约41000个信号,这与您的实验结果相关。

通常,您不应该在堆栈上分配SystemC对象。现实世界中的设计通常不适合8MB。而是在堆上分配:

#include <systemc.h>
struct test_module : sc_module {
sc_signal<float>    values[100][800];
SC_CTOR(test_module) {}
};
int sc_main (int argc, char**argv) {
auto tmod0 = std::make_unique<test_module>("tmod0");
sc_start();
return 0;
}