В C, как многие из вас знают, стек содержит все локальные переменные. Стек, являющийся первой в последней структуре данных, означает, что вы можете получить доступ только к тому, что было недавно наложено на него. Поэтому, учитывая следующий код:Какова идея использования стека для локальных переменных?
int k = 5;
int j = 3;
short int i;
if (k > j) i = 1;
Очевидно, что это бесполезно код, который не имеет никакого реального смысла, но я стараюсь, чтобы обернуть мою голову вокруг чего-то.
Для краткого объявления int i я предполагаю, что в стек будет выделено 2 байта. Для инт к и Int J для обоих 4 байта получают наделенный значения 5 и 3. Таким образом, стек будет выглядеть следующим образом
---------- <- stack pointer
int i
----------
int k = 5
----------
int j = 3
----------
поэтому для если заявление вы должны совать Int я, чтобы добраться до условия k и j, и если да, то где int i go? Все это кажется очень трудоемким и утомительным, если это так, что C выполняет локальные переменные.
Так это на самом деле, как C это или я все это делаю?
на самом деле ваше расположение элементов в стеке неверно, так как я короткий, а не int. и стек растет вниз в памяти, а не вверх, а локальные переменные помещаются в стек в обратном порядке. Независимо от того, какое значение в локальном стеке не выбрано, скорее используется смещение от указателя стека, поэтому, ссылаясь на «k», получается «прочитанное слово (некоторый регистр)» из sp [(offset to k) »аналогично для j '. и 'i' задается как «написать halfword sp [offset to i] из (нижняя половина регистра, содержащего результат k + j), в общем случае вы можете думать о стеке как длинном массиве с разделами – user3629249