Пусть,распределение памяти в конкатенации в C#
string a = “Test”;
string b = “test 2”;
string c = a + b
Выход с является "Testtest 2"
Я хотел бы знать, как распределяется память?
Пусть,распределение памяти в конкатенации в C#
string a = “Test”;
string b = “test 2”;
string c = a + b
Выход с является "Testtest 2"
Я хотел бы знать, как распределяется память?
string a = "Test";
Вы создаете ссылку под названием a
и его наведение на "Test"
объекта в памяти.
string b = "test 2";
Вы создаете ссылку под названием b
и его наведение на “test 2”
объекта в памяти.
string c = a + b;
Вы выделения нового адреса памяти для a + b
(и этот процесс использует String.Concat
метод.), Потому что строки immutable в .NET. А затем c
ссылка на этот новый адрес памяти.
Вот код IL этого;
IL_0000: nop
IL_0001: ldstr "Test"
IL_0006: stloc.0
IL_0007: ldstr "test 2"
IL_000c: stloc.1
IL_000d: ldloc.0
IL_000e: ldloc.1
IL_000f: call string [mscorlib]System.String::Concat(string,
string)
IL_0014: stloc.2
IL_0015: ldloc.2
stloc.0
используется, в котором хранится значение на вершине стека оценки в локальной памяти, слот 0.
ldstr
команд используется, чтобы загрузить строку в памяти или оценки стека. Необходимо загрузить значения в оценочный стек до того, как они будут использованы.
Инструкция ldloc
является инструкцией по нагрузке. Ldloc
помещает значение локальной переменной в стек.
http://www.dotnetperls.com/string-memory – shenku