.NET Framework выделяет меньше памяти для Int32
, чем для Int64
в 64-разрядных системах?В 64-битных системах 32-разрядная переменная занимает меньше места, чем 64-битный объект?
ответ
Int32 и Int64 должны потреблять такое же пространство на всех платформах (означающей Int32 потребляет столько же, сколько другой Int32 на x86 и x64). На всех платформах Int32 должен потреблять различную сумму, чем Int64.
Однако Int32 и Int64 являются плохими примерами, поскольку они являются структурами. Объекты потребляют значительно различное пространство на x64 против x86, потому что они в основном указатели и указатели на x64 в два раза шире, чем на x86. Это относится к адресам функций, адресам перехода, vtables, инструкциям вызова и т. Д. И т. Д. Скомпилированное приложение x64 и JIT-код приложения IL для x64 будут значительно больше, чем его сопоставление x86. Раньше также было, что генерация кода x86 была более зрелой и оптимизирована более агрессивно просто потому, что компиляторы были более зрелыми (это также относится к генерации кода JIT), но компилятор догнал, и теперь дни оптимизации x64 находятся на уровне, если не лучше, чем x86.
Нет, они потребляют одинаковое пространство, так как наименьшее адресуемое пространство составляет 64 бит.
@ Лукас: они потребляют столько же места в регистре. Различные количества в памяти. –
Ваш ответ полезен, но [вы можете сделать это лучше] (http://meta.stackexchange.com/q/8259), включив сводку или соответствующие части страниц, на которые вы ссылаетесь. Это также поможет вашему ответу оставаться прекрасным, даже если ссылки, которые вы включили, в будущем. – derobert
Перефразируйте свой ответ: данный экземпляр структуры использует одно и то же пространство памяти на любой платформе. Различные структуры потребляют различное пространство памяти на одной платформе. Только объекты, которые потребляют различное пространство в зависимости от платформы. –
@ estourodepilha.com: не всегда. Одним из примеров этого является то, что структура содержит поле ссылочного типа или поле, зависящее от платформы, например. IntPtr - одно и то же объявление структуры будет потреблять больше памяти на x64. –