Использование памяти

Среда выполнения С/С++ требует использования определенных секций для размещения кода и данных в памяти процессора. Эти секции задаются в LDF-файле в виде выходных (Output) секций. Естественно, что проецирование секций на физическую память процессора должно выполняться с учетом модели процессора и структуры его памяти. Одним из наиболее простых вариантов для небольших проектов является отказ от разработки собственного LDF-файла и использование LDF-файла по умолчанию. В этом случае LDF-файл вообще не следует добавлять в проект: компоновщик будет использовать файл описания архитектуры, соответствующий выбранному в опциях типу процессора и языку программирования. Если же необходимы какие-либо модификации, например в размерах сегментов, то следует скопировать стандартный ldf-файл в свою директорию, подключить его к проекту и затем вносить в него изменения.

Стандартными для компилятора С/С++ выходными секциями являются:

Имя секции Для чего используется
seg_pmco Размещается в памяти программ, содержит код программы, а также требуется для нормальной работы некоторых библиотечных функций С/С++
seg_dmda Размещается в памяти данных. По умолчанию содержит все глобальные и статические переменные, а также символьные строки, например в этой секции будет размещен массива data: static int datas[10]; Требуется для работы некоторых библиотечных функций С/С++
seg_pmda Размещается в памяти программ и содержит переменные, которые должны быть явно помещены в PM-память, например: static int pm coeffs[10]; Требуется для работы некоторых библиотечных функций С/С++
seg_stak Размещается в памяти данных и используется для хранения локальных переменных и адресов возврата из подпрограмм. Обязательна для функционирования программы на С/С++. Обычно размер стека составляет 4К 32-битовых слов
seg_heap Размещается в памяти данных и представляет собой "кучу", из которой динамически выделяется память при необходимости во время работы программы (при выполнении операций malloc, calloc и т.п.). Стандартный размер кучи – 60К 32-битовых слов. Компилятор поддерживает возможность использования нескольких куч, причем размещенных в различных пространствах памяти.
seg_init Размещается в памяти программ и содержит данные, необходимые для инициализации программы, т.е. ее загрузки во внутреннюю память процессора для выполнения (или настройки параметров внешней памяти при выполнении команды из внешнего ОЗУ).
seg_rth Размещается в памяти программ и содержит код для выполнения инициализационных действий и таблицу векторов прерываний. Инициализационный (заголовочный) код, run-time header, устанавливает начальные значения переменных среды выполнения С/С++, инициализирует таблицу векторов прерывания, вызывает функцию main(). Для этого по умолчанию используется объектный файл, выходящий в состав среды VisualDSP++ (например, 060_hdr.doj). Механизм обработки прерываний в программах на С/С++ основан на использовании такого файла инициализации среды выполнения.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: