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

C++ memory allocation use Under Green Hills INTEGRITY

本文关键字:Green Hills INTEGRITY Under 内存 分配 C++      更新时间:2023-10-16

对不起,我是格林希尔的新手。我使用的是MULTI 6.1.6,我选择的语言是C++。

当我尝试使用模拟器使用new初始化一个大于1M大小的类的对象时,我遇到了一个问题。

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

如果sizeOf(Class_Big)>1MB,它就永远不会调用类构造函数,返回NULL并转到下一条指令(Class_Small*Small_obj;),然后正确创建下一个对象。如果我在Class_Big上找出一些变量以使其大小<1MB代码运行良好,并且创建了对象。

我添加了两个

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

到我的xml文件。

我在构建阶段遇到的另一个错误如果我使用了一个lib,则有一个大类:

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

你能帮忙吗?

感谢

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

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

同样来自他们的手册:

"检查正在使用的.bsp文件。用MinimumAddress/MaximumAddress关键字必须与板的内存匹配。如果没有,请根据需要修改这些关键字。如果内存在.bsp文件中声明的与板不匹配,您必须修改应用程序使用更少的内存。">

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

使用INTEGRITY,您可以完全控制每个分区使用的内存量。它是一个静态配置。所有的东西,你能想到的代码堆栈堆,都是从中产生的。因此,如果分区中有一堆代码、自动程序等,那么如果要求太多,内存分配可能会失败。试着加大尺寸。

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

第二部分仍然试图弄清楚。