При перезаписи данных в тип значения создается новая переменная или нет
Например, создается переменная int a=5; после в коде она изменяется на a=10; вопрос: в ячейке памяти в стеке, куда было записано 5 изменилось само значение на 10 или выделилась новая область памяти под нее и туда записалась 10 а 5 так и осталась в памяти?
Ответы (1 шт):
Что касается локальных переменных, то давайте посмотрим во что превратится этот код после компиляции
int a = 5;
Console.WriteLine(a);
a = 10;
Console.WriteLine(a);
А вот во что, откомпилированный ассемблер
mov ecx, 5
call System.Console.WriteLine(Int32)
mov ecx, 10
call System.Console.WriteLine(Int32)
Никакого стека, никакой памяти не используется, используется только регистр процессора ECX. Так как регистры процессора - это то что существует всегда, то можно сказать, что выделения памяти или создания каких-либо сущностей, потребляющих дополнительные ресурсы компьютера не создается, ни в первом, не во втором случае.
Если же переменная будет членом класса
private int a;
a = 5;
Console.WriteLine(a);
a = 10;
Console.WriteLine(a);
То получится вот так
mov dword ptr [esi+4], 5
mov ecx, [esi+4]
call System.Console.WriteLine(Int32)
mov dword ptr [esi+4], 10
mov ecx, [esi+4]
call System.Console.WriteLine(Int32)
[ESI+4] - это адрес ячейки памяти, где лежит a. Как видно, происходит перезапись участка оперативы, новой памяти не выделяется.