[an error occurred while processing this directive] [an error occurred while processing this directive]
А о каком компиляторе Вы рассказываете ? (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено просто так 19 сентября 2001 г. 13:17
В ответ на: Локальные переменные действительно создаются в стеке отправлено Михаил Е. 19 сентября 2001 г. 12:57

У тех компиляторов, которые я "юзал" раньше рассчитывался линкером требуемый "кусок" (сегмент) памяти под локальные переменные и при генерации выходного BIN (или HEX или др.) файла вычислялись АБСОЛЮТНЫЕ адреса локальных переменных.
Теоретически возможен такой путь, когда компилятор "втихаря" ведет свой стек, а адреса локальных переменных - ОТНОСИТЕЛЬНЫЕ (отностельно какого-то своего внутреннего программного указателя на свой внутренний стек). А при вызове функции указатель на текущее положение стека будет сдвигаться на размер локальных переменных в этой функции.
Но на практике я такого не встречал (хотя если я не встречал, то это не значит, что такого нет :-) ). Кстати, это все легко можно увидеть с помощью ассемблерного листинга - так что просмотрите в Вашем конкретном компиляторе asm-коды при работе с локальными переменными - скорее всего там жестко стоят адреса (даже не адреса, а "болванки", куда линкер сам подставит вычисленный адрес). Но я не претендую на роль абсолютной истины :-) и в Вашем компиляторе это может быть реализовано и как-то по-другому.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru