SystemC sc_signal数组内存边界
SystemC sc_signal array memory bounds
我一直在尝试使用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;
}
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- SystemC sc_signal数组内存边界
- Opencl-将全局内存工作组+边界转移到本地内存
- 在 C/C++ 中在特定地址边界上对齐内存是否仍能提高 x86 性能?
- 使用硬件内存保护对64位硬件进行数组边界检查
- C++数组能否在内存边界结束
- 跨DLL边界的矢量内存重定位
- Borland C++ 编译器在跨构造函数边界引发异常时不会撤消内存分配?
- 关于指针对齐,有没有一种方法可以使指针与给定的内存边界对齐