Почему valutype занимает меньше места, чем тип объекта в .NET? - PullRequest
0 голосов
/ 22 марта 2011

Говорят, что valuetype происходит от system.object.Почему производные от объекта классы занимают больше места, чем структуры типа значений?Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 22 марта 2011

Каждый объект имеет заголовок объекта.Это 8 байтов на 32-битной машине, 4 для блока синхронизации и 4 для дескриптора типа.Значение типа значения выводится только из System.Object, когда оно упаковано.Значение int составляет 4 байта, когда оно распаковано, 12 байтов, когда оно упаковано, +8 байтов для заголовка.

Проверьте этот ответ , чтобы получить более полное представление о том, как выглядит тип упакованного значения.

0 голосов
/ 22 марта 2011

Большую часть времени происходит небольшая ложная ложь в отношении типов значений, наследуемых от ValueType, а через него - от Object.В распакованном int или bool не хранится ничего, относящегося к этому наследованию.Тем не менее, он получает его, если он в штучной упаковке (что произойдет неявно с некоторыми операциями).Большинство языков скрывают это, поэтому они кажутся просто такими же, как и любой другой объект, который наследуется от Object всякий раз, когда мы используем их как таковые, но также действуют как простые типы, когда мы используем их как таковые.

0 голосов
/ 22 марта 2011

Поскольку типы значений обрабатываются компилятором по-разному.Даже если они наследуются от Object, они не сохраняются как объекты.

Объекты хранятся в куче с дополнительными издержками двух указателей (8 байтов в 32-битной системе, 16 байтов в 64-битнойсистема).Типы значений хранятся встроенными, либо как часть объекта, либо в кадре стека вызова метода, и никаких дополнительных затрат не возникает.

...