Нет, они не.Указатель стека (обычно реестр esp
) указывает на a
, esp+8h
указывает на b
, esp+16h
указывает на c
и так далее.Нет необходимости вставлять a
.
Обратите внимание, что это деталь реализации.Вы не должны беспокоиться об этом.Число, которое я дал, является чисто теоретическим, в некоторых архитектурах нисходящие адреса задаются последним параметрам, в других - наоборот.Нет гарантии, что это произойдет.
РЕДАКТИРОВАТЬ: Мне кажется, что это не очень надежный источник информации.Он говорит о стеке и куче, но это детали реализации, и они могут даже не присутствовать.
В стандарте нет ограничений для того, чтобы что-либо реализовывалось через стек.Например, у меня сгенерирован следующий код:
void foo(int x, int y, int z)
{
01241380 push ebp
01241381 mov ebp,esp
01241383 sub esp,0CCh
01241389 push ebx
0124138A push esi
0124138B push edi
0124138C lea edi,[ebp-0CCh]
01241392 mov ecx,33h
01241397 mov eax,0CCCCCCCCh
0124139C rep stos dword ptr es:[edi]
int c = x;
0124139E mov eax,dword ptr [x]
012413A1 mov dword ptr [c],eax
c = y;
012413A4 mov eax,dword ptr [y]
012413A7 mov dword ptr [c],eax
c = z;
012413AA mov eax,dword ptr [z]
012413AD mov dword ptr [c],eax
}
012413B0 pop edi
012413B1 pop esi
012413B2 pop ebx
012413B3 mov esp,ebp
012413B5 pop ebp
Итак, видите, там нет стека.Среда выполнения имеет прямой доступ к элементам: dword ptr [x]
и т. Д.