Думаю, многим разработчикам на управляемом коде всегда интересовало: сколько же байт занимает экземпляр объекта? А каков лимит размера одного объекта в CLR? Существуют ли различия в выделении памяти между 32-битными и 64-битными системами? Если данные вопросы для Вас не пустой звук, тогда прошу под кат. ПредисловиеПрежде вспомним, что в .NET существует 2 вида объектов: value types и reference types, которые создаются, соответственно, в стеке и куче (управляемом сборщиком мусора).
Value types предназначены для хранения простых данных, будь то число, символ. Во время присваивания значения переменной происходит копирование каждого поля объекта. Также время жизни таких объектов зависит от области видимости. Размеры value types определены в Common Type System и составляют:
Reference types, наоборот, представляют собой ссылку на область памяти, занимаемой экземпляром объекта в куче.Ниже приведена внутренняя структура CLR-объектов:
Read more: Habrahabr.ru
QR:
Value types предназначены для хранения простых данных, будь то число, символ. Во время присваивания значения переменной происходит копирование каждого поля объекта. Также время жизни таких объектов зависит от области видимости. Размеры value types определены в Common Type System и составляют:
Количество байт | |
System.Byte | 1 |
System.SByte | 1 |
System.Int16 | 2 |
System.Int32 | 4 |
System.Int64 | 8 |
System.UInt16 | 2 |
System.UInt32 | 4 |
System.UInt64 | 8 |
System.Single | 4 |
System.Double | 8 |
System.Char | 2 |
System.Decimal | 16 |
Reference types, наоборот, представляют собой ссылку на область памяти, занимаемой экземпляром объекта в куче.Ниже приведена внутренняя структура CLR-объектов:
Read more: Habrahabr.ru
QR: