Способы размещения объектов в памяти

Помимо статических объектов, адреса которых не изменяются за время выполнения программы, в программе, написанной на языке высокого уровня, могут существовать так называемые автоматические объекты, память под которые временно отводится в стеке МК. Адреса таких объектов не абсолютны, а определяются динамически на этапе выполнения программы. Обычно они отсчитываются от текущего значения некоторой статической переменной, называемой указателем фрейма стека (Base Pointer или ВР). Так как значение ВР формируется программой динамически на этапе выполнения, значения автоматических объектов доступны только в пределах их области видимости, т. е. при правильном значении ВР Отладчик при отображении значений автоматических объектов должен "знать" способ, которым определяются адреса, а также отслеживать правильность значения ВР

Возможно также временное размещение переменных в регистрах МК. В этом случае отладчик должен "знать", какие переменные в каких регистрах размещены и в течение какого времени. И, наконец, часто встречается ситуация, когда один и тот же объект за время своей жизни меняет способ размещения в памяти, причем не один раз. Это может происходить, например, когда функция получает один или несколько параметров в регистрах, а затем перемещает их в стек.

ОБЛАСТЬ ВИДИМОСТИ ОБЪЕКТА

Как и в ассемблерных, в программах на Си существуют глобальные объекты, доступные по имени из любого модуля, и объекты, локализованные в модуле (эти объекты объявляются как static). Однако автоматические и регистровые переменные создают отладчикам дополнительные трудности при отображении их значений. Дело в том, что, во-первых, время жизни автоматического объекта ограничено его областью видимости, а во-вторых, охватывающие области видимости могут иметь свои автоматические объекты с теми же именами. Проиллюстрируем это на примере функции, имеющей несколько вложенных областей видимости:


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



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