Распределение памяти в C - PullRequest
       41

Распределение памяти в C

0 голосов
/ 03 февраля 2011

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

Ответы [ 3 ]

3 голосов
/ 03 февраля 2011

Это довольно сложно узнать из статического анализа самого скомпилированного кода. Вы должны быть в состоянии увидеть любые статические инициализированные области данных, а также статические неинициализированные (BSS) разделы, но как именно они загружаются относительно стека, кучи и т. Д., Зависит от исполняемого загрузчика платформы.

0 голосов
/ 05 февраля 2011

вы можете попробовать использовать ollydbg , который является бесплатным отладчиком. Единственный недостаток в том, что он показывает все в виде сборки, но он покажет вам, что находится в вашем стеке, куче и даже в ваших регистрах. Я не уверен, что это то, что вы ищете.

0 голосов
/ 04 февраля 2011

Если вы работаете во встроенной платформе, вам, вероятно, следует использовать несколько скриптов компоновщика (файлы lcf) вместе со сборкой программы, тогда вы сможете детально идентифицировать все разделы (стек, куча, intvec, bss, текст, код), его размещение в памяти (будь то в кеше L1, кеше L2 или DDR) и его начальный / конечный адрес при загрузке в плату.

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

Также есть еще один способ проанализировать разделы, вы можете создать «файл карты» для вашего проекта и пройти черезВ нем будут перечислены все разделы программы и ее адреса.

...