Привет, я искал ответ на этот вопрос довольно долго. Я хочу знать вещи под капотом относительно того, когда мой код будет заменен памятью.Объявление переменной уже занимает память
Ex. int myVar;
- Этот код уже занимает память? по памяти я имею в виду стек? и изначально в .NET. Я заметил, что эта строка будет иметь значение по умолчанию ZERO (0).
- Но какая переменная действительно хранится? значение ZERO или адрес, где хранится значение ZERO (0)?
также от того, что я понимаю, о ссылочного типа является то, что, когда я пишу эту строку кода
MyClass myObj; // Объявляем только
myObj = новый MyClass() // создать экземпляр
Я хочу знать, что происходит под капотом. Правильны ли мои предположения? То, что myObj будет находиться в стеке, и myObj способен хранить адрес. и при моем создании объекта объект создается в куче, и адрес этого объекта передается переменной myObj.
Дело в том, что я хочу знать, эффективнее (с точки зрения памяти и производительности) между двумя ниже.
Код 1: int myVar; myVar = FunctionThatReturnsAnInteger(); Console.WriteLine (myVar);
Код
Console.WriteLine (FunctionThatReturnsAnInteger());
Я хочу хорошее объяснение этому, и аналогия весьма удобна.
Заранее спасибо. :)
я попытался создавая указатель, 2 разные неинициализированные целочисленные переменные. назначая адрес двух целых чисел по одному и печатая их соответственно. Они показали два разных адреса. Я полагаю, что к моменту объявления они уже занимают память? –
Для получения дополнительной информации вы должны проверить следующую ссылку: [msdn] (http://msdn.microsoft.com/en-us/library/vstudio/ms173104.aspx) espcially ** Типы, которые происходят из ValueType, имеют особое поведение в CLR. Переменные типа значения непосредственно содержат их значения, а это означает, что память выделена встроенным в любом контексте, в котором объявлена переменная **, и для ссылочных значений ** Когда объект создается, память выделяется в управляемой куче, а переменная имеет значение только ссылка на местоположение объекта ** – Marco
@ Марко благодарю вас за ответ и хорошую ссылку. Можете ли вы ответить на мой последний вопрос, в котором больше памяти. Объявление переменной и улавливание возвращаемого значения вызываемой и отображаемой функции ИЛИ прямого вызова функции и использования параметра return в качестве параметра для Console.WriteLine() –