Когда в компактной платформе .NET выделяется память? Если есть разница между типом значения и ссылочным типом, укажите подробности. Приветствуются документация или шаги для подтверждения.
В частности, рассмотрите этот сценарий ...
private MyClass item; // here?
public void MyMethod()
{
item = new MyClass(); // or here?
}





Есть 3 различных способа распределения памяти.
Статический:
Они привязываются и выделяются во время компиляции. Например, глобальные статические переменные.
Стек динамический:
Они связываются во время выполнения и помещаются в стек. Например, локальная переменная в вызове функции.
Динамическая куча:
Теперь у динамической кучи также есть несколько разных «подкатегорий», таких как неявные и явные, но я не буду вдаваться в эти подробности.
Когда вы заявляете
private MyClass item; // here?
ссылка на MyClass помещается в стек. Это всего лишь справка и не более того. В этот момент его значение равно нулю.
public void MyMethod()
{
item = new MyClass(); // or here?
}
Именно в этот момент память явно выделяется в куче путем вызова 'new MyClass ()', а затем элемент ссылается на него.
Итак, на самом деле у вас есть две переменные после вызова MyMethod. Тип ссылки с именем item и безымянная переменная в куче, элемент которой ссылается на тип MyClass.
Это что-то вроде вопроса с подвохом, и он мне нравится намного больше, чем я думал. :)
Начнем с основ:
Объявление переменной напрямую не выделяет для нее память * для ссылочных типов. делает делает это с типами значений, потому что типы значений инициализируются в точке объявления. Для ссылочных типов хранилище для объекта выделяется в момент ввода их конструкторов.
* Когда это не применяется?
null, но как только вы инициализируете свой объект, действительная ссылка будет существовать в выделенной памяти.)Я настоятельно рекомендую этот Статья C-Sharp Corner относительно распределения стека и кучи для получения дополнительной информации.
И он должен; его ответ был более обстоятельным. :) Мы с ним ответили почти одновременно, примерно через минуту. :)
Я настоятельно рекомендую вам посмотреть веб-кейс MSDN на Управление памятью Compact Framework. Это не совсем то же самое, что и на настольном компьютере, и в этом докладе он рассматривается с большим количеством деталей и графиков, чтобы помочь в понимании GC Heap.
Ссылка: <msevents.microsoft.com/cui/…>
Но мероприятие закончилось, и я не могу найти загрузку видео или презентации.
Просто зарегистрируйтесь, и вы получите ссылку для скачивания. Это не очень интуитивно понятно.
Очень хороший ответ, добавляет несколько вещей, которые намекнул Николас. Я проголосую за, но он получает баллы за ответы. Спасибо!