Sunday, January 22, 2012

Размеры CLR-объектов. Точное определение

Думаю, многим разработчикам на управляемом коде всегда интересовало: сколько же байт занимает экземпляр объекта? А каков лимит размера одного объекта в CLR? Существуют ли различия в выделении памяти между 32-битными и 64-битными системами? Если данные вопросы для Вас не пустой звук, тогда прошу под кат.

Предисловие

Прежде вспомним, что в .NET существует 2 вида объектов: value types и reference types, которые создаются, соответственно, в стеке и куче (управляемом сборщиком мусора).
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-объектов:

c79b6e22930f6050aa6e24ff50d2b300.png

Read more: Habrahabr.ru
QR: http://chart.googleapis.com/chart?chs=80x80&cht=qr&choe=UTF-8&chl=http://habrahabr.ru/blogs/net/136609/

Posted via email from Jasper-Net