对不起,我是格林希尔的新手。我使用的是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
你能帮忙吗?
由于
答案 0 :(得分:2)
要指定堆和内存池的内存大小,请在MULTI GUI中转到.int文件(扩展时可以在.gpj下拉列表中找到),然后双击它进行编辑。然后在紫色框内右键单击并转到"编辑"。转到"属性"选项卡,您可以将内存池大小和堆大小修改为更大。
或者您可以在文本编辑器中编辑.int文件,但如果您想使用gui来设置这些,请按照上述步骤操作。
同样来自他们的手册:
"检查正在使用的.bsp文件。用...声明的内存 MinimumAddress / MaximumAddress关键字必须与您的主板内存匹配。 如果没有,请根据需要修改这些关键字。如果是记忆 在.bsp文件中声明与主板匹配,你必须修改你的 应用程序使用更少的内存。"
此外,检查default.ld,您可以在那里设置RAM限制的值。查看__INTEGRITY_RamLimit以及那里的其他值。希望这有帮助!
答案 1 :(得分:1)
使用INTEGRITY,您可以完全控制每个分区使用的内存量。这是一个静态配置。你命名的所有代码堆栈都是由它来实现的。因此,如果您在分区中有一堆代码,自动代码等,那么如果您要求太多内存分配可能会失败。尝试增加大小。
答案 2 :(得分:0)
对于问题的第一部分基本上我应该修改" VirtualHeapSize"在.ld组件文件上。
第二部分仍然试图弄明白。