Распределение памяти в C ++ с использованием Under Green Hills INTEGRITY

Извините, я новичок в Гринхилл. Я использую MULTI 6.1.6, и мой язык выбора — C ++.

У меня проблема при попытке использовать симулятор для инициализации объекта класса размером более 1М с помощью new.

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

если sizeOf (Class_Big)> 1 МБ, он просто никогда не вызывает конструктор класса, возвращает NULL и переходит к следующей инструкции (Class_Small * Small_obj;) и правильно создает следующий объект. Если я выделю некоторые переменные на Class_Big, чтобы сделать его размер < 1MB код работает нормально и объект создан.

Я добавил оба

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

в мой XML-файл.

Еще одна ошибка, которую я получаю на этапе сборки. Если я использовал библиотеку, у меня большой класс:

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

Вы можете помочь с этим?

Спасибо

1

Решение

Чтобы указать размеры памяти для кучи и пула памяти, в графическом интерфейсе MULTI перейдите к файлу .int (его можно найти в раскрывающемся списке .gpj при его расширении) и дважды щелкните его, чтобы отредактировать. Затем щелкните правой кнопкой мыши внутри фиолетового поля и перейдите в «Редактировать». Перейдите на вкладку «Атрибуты», и вы сможете изменить размер пула памяти и кучи, чтобы они были больше.

В качестве альтернативы вы можете просто отредактировать файл .int в текстовом редакторе, но если вы хотите использовать графический интерфейс для настройки, выполните следующие действия.

Также из их руководства:

«Проверьте используемый файл .bsp. Память, объявленная с
Ключевые слова MinimumAddress / MaximumAddress должны соответствовать памяти вашей доски.
Если это не так, измените эти ключевые слова по мере необходимости. Если память
заявлено в файле .bsp соответствует доске, вы должны изменить ваш
приложение, чтобы использовать меньше памяти. «

Кроме того, проверьте default.ld, и вы можете установить значения для ограничений оперативной памяти там. Посмотрите на __INTEGRITY_RamLimit и другие значения там. Надеюсь это поможет!

2

Другие решения

С INTEGRITY вы полностью контролируете, сколько памяти используется для каждого раздела. Это статическая конфигурация. Все, куча кода, как вы его называете, выходит из этого. Так что, если у вас есть куча кода, автоматики и т. Д. В разделе, выделение памяти может произойти сбой, если вы попросите слишком много. Попробуйте увеличить размер.

1

Для первой части проблемы В основном я должен был изменить «VirtualHeapSize» в файле .ld компонента.

Во второй части все же попробуем разобраться.

0
По вопросам рекламы [email protected]