Итак, сегодня мы с Вами с помощью молотка и лопаты попытаемся
Имеется простейший класс: class X { public int Val; }. При создании объекта этого класса какой реальный размер он будет занимать? И какие значения будут содержать дополнительные поля? Предъявите доказательство в виде кода на C# ;)
Разумеется, это только первая загадка из серии, но этого должно хватить по крайней мере на выходные. Выяснение внутренностей .NET — достаточно большая тема.
Примечание: поскольку речь идет о системно-зависимых вещах, я буду полагать, что код выполняется на 32-битной ОС.
UPD Итак, было получено два схожих решения: от lam0x86: iaroshenko.habrahabr.ru/blog/77275/#comment_2250121 и от crjd: iaroshenko.habrahabr.ru/blog/77275/#comment_2252317. Я сначала классифицировал их как неправильные, но позже увидел свою ошибку.
Тем не менее, оба решения основаны на том, что в классе есть открытое поле
int. Если же это будет не поле, а свойство, или не будет совсем ни полей ни свойств, то такое решение не сработает.Поэтому я решил продемонстрировать «авторский вариант»: iaroshenko.habrahabr.ru/blog/77275/#comment_2269072. Естественно, он будет работать только в этих ограниченных рамках: простейшая программа, где нет нужды создавать другие объекты или собирать мусор.
Кстати, если убрать поля совсем, то размер все равно остается тем же, только дополнительное поле равно нулю.

