Когда я отлаживаю эти строки кода, я вижу, что ms / ms2 являются экземплярами типа значения и они размещаются в стеке, а o (в штучной упаковке экземпляр MyStruct) является ссылочным типом и выделяется в управляемой куче.1002 * Я могу просмотреть адреса ms и ms2 из окна Watch в Visual Studio, они 0x0024f104 и 0x0024f0f0 соответственно.Таким образом, стек растет вниз по направлению к нижней части адресного пространства.Поскольку стек и куча растут навстречу друг другу, область адресов для управляемой кучи должна быть ниже 0x0024f0f0.Но адрес o на самом деле 0x01e9312c, что означает, что куча не растет в стеке (хотя я могу наблюдать, когда новые объекты размещаются в куче, их адреса действительно растут вверх).
Может кто-нибудь помочь объяснить это?
MyStruct ms = new MyStruct(1, 2, 4, 8); //0x0024f104, 16 bytes for ms
Object o = ms; //0x0024f100, 4 bytes for variable o
MyStruct ms2 = (MyStruct)o; //0x0024f0f0, 16 bytes for ms2