Распределение памяти в 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
Вы можете помочь с этим?
Спасибо
3 ответа
Чтобы указать размеры памяти для кучи и пула памяти, в графическом интерфейсе MULTI перейдите к файлу.int (его можно найти в раскрывающемся списке.gpj при его расширении) и дважды щелкните его, чтобы отредактировать. Затем щелкните правой кнопкой мыши внутри фиолетового поля и перейдите в "Редактировать". Перейдите на вкладку "Атрибуты", и вы сможете изменить размер пула памяти и кучи, чтобы они были больше.
В качестве альтернативы вы можете просто отредактировать файл.int в текстовом редакторе, но если вы хотите использовать графический интерфейс для настройки, выполните следующие действия.
Также из их руководства:
"Проверьте используемый файл.bsp. Память, объявленная с ключевыми словами MinimumAddress/MaximumAddress, должна соответствовать памяти вашей доски. Если это не так, измените эти ключевые слова по мере необходимости. Если память, объявленная в файле.bsp, соответствует доске, вы необходимо изменить ваше приложение, чтобы использовать меньше памяти. "
Кроме того, проверьте default.ld, и вы можете установить значения для ограничений оперативной памяти там. Посмотрите на __INTEGRITY_RamLimit и другие значения там. Надеюсь это поможет!
С INTEGRITY вы полностью контролируете, сколько памяти используется для каждого раздела. Это статическая конфигурация. Все, куча кода, как вы его называете, выходит из этого. Так что, если у вас есть куча кода, автоматики и т. Д. В разделе, выделение памяти может произойти сбой, если вы попросите слишком много. Попробуйте увеличить размер.
Для первой части проблемы В основном я должен был изменить "VirtualHeapSize" в файле.ld компонента.
Во второй части все же попробуем разобраться.