В какой памяти хранятся указатели?

Есть код:

int a = 6;
int* b = &a;

Так вот вопрос: в какой памяти хранится указатель b? В стеке?


Ответы (1 шт):

Автор решения: return

Локальные переменные в C# могут храниться либо в регистрах, либо в стеке.

Стек более "медленный", чем регистры, но он больше (обычно 1 МБ в Windows) и от переменных в стеке можно брать адрес; также в стеке можно хранить переменные любого размера. В вашем случае переменная a хранится в стеке, т. к. след. строчкой вы у неё берёте адрес.

Регистры быстрее стека, но они меньше по размеру (размер зависит от процессора, обычно <100 байт) и от переменных в регистрах адрес брать нельзя; также в регистрах можно хранить переменные размером в 2, 4 и 8 байт (почти всегда размер указателя). Т. е. переменная b скорее всего будет храниться в регистах.

Почему «скорее всего»? Дело в том, что мы не управляем распределением переменных на прямую – это делает компилятор (IL → Native, компилятор C# → IL просто добавляет push IL-инструкции), а так как реализация компилятора уникальна для каждой платформы (у .NET своя, у Mono своя и т. д.), то он может расположить переменную b где угодно, но понятно, что скорее всего (по крайней мере в .NET так) он будет располагать её в регистрах.

ДОПИНг (ДОПолнительная ИНформация)

→ Ссылка