C++内存分配使用Under Green Hills INTEGRITY

C++ memory allocation use Under Green Hills INTEGRITY

抱歉,我是 Greenhill's 的新用户。我正在使用 MULTI 6.1.6,我选择的语言是 C++。

我在尝试使用模拟器启动一个 class 大小超过 1M 的对象时遇到问题。

Class_Big* big_obj;
Class_Big = new Class_Big();
Class_Small* Small_obj;
Small_obj = new Class_Small();

if sizeOf(Class_Big) > 1MB 它永远不会调用 class 构造函数,return NULL 并转到下一条指令 (Class_Small* Small_obj;) 并正确创建下一个对象。如果我在 Class_Big 上确定一些变量以使其大小小于 1MB,则代码可以正常工作并创建对象。

我都加了

MemoryPoolSize="0x200000"
HeapSize="0x200000" 

到我的 xml 文件。

我在构建阶段遇到的另一个错误如果我使用的库有很大的 class:

intex: error: Not enough RAM for request.
intex: fatal: Integrate failed.
Error: build failed

你能帮忙吗?

谢谢

对于问题的第一部分基本上我应该修改.ld 组件文件上的"VirtualHeapSize"。

第二部还在琢磨

要指定堆和内存池的内存大小,在 MULTI GUI 中转到 .int 文件(展开后可以在 .gpj 下拉列表中找到)并双击它进行编辑。然后在紫色框内右击并转到 "Edit"。转到 "Attributes" 选项卡,您可以将内存池大小和堆大小修改为更大。

或者,您可以只在文本编辑器中编辑 .int 文件,但如果您想使用 gui 来设置这些,请按照上述步骤操作。

同样来自他们的手册:

"Check the .bsp file in use. The memory declared with the MinimumAddress/MaximumAddress keywords must match your board's memory. If it does not, modify these keywords as needed. If the memory declared in the .bsp file does match the board, you must modify your application to use less memory."

此外,检查 default.ld 并且您可以在那里设置 RAM 限制的值。查看 __INTEGRITY_RamLimit 和那里的其他值。希望这对您有所帮助!

使用 INTEGRITY,您可以完全控制每个分区使用的内存量。它是一个静态配置。一切,代码堆栈堆,你的名字,都来自于它。因此,如果您在分区中有一堆代码、自动化等,那么如果您要求太多,内存分配可能会失败。尝试增加尺寸。