В 64-битных системах 32-битная переменная занимает меньше места, чем 64-битный объект? - PullRequest
2 голосов
/ 12 марта 2010

.NET Framework выделяет меньше памяти для Int32, чем для Int64 в 64-битных системах?

Ответы [ 3 ]

1 голос
/ 12 марта 2010

Int32 и Int64 должны занимать одно и то же пространство на всех платформах (то есть Int32 потребляет столько же, сколько другой Int32 на x86 и x64). На всех платформах Int32 должно потреблять количество, отличное от Int64.

Однако и Int32, и Int64 являются плохими примерами, поскольку они являются структурами. Объекты занимают существенно различное пространство в x64 и x86, потому что они в основном указатели, а указатели в x64 в два раза шире, чем в x86. Это относится к адресам функций, адресам перехода, vtables, инструкциям вызова и так далее, и так далее. Скомпилированное приложение x64 и код JIT приложения IL для x64 будут значительно больше, чем его аналог x86. Раньше было так же, что генерация кода x86 была более зрелой и более агрессивной оптимизацией просто потому, что компиляторы были более зрелыми (это применимо и к генерации кода JIT), но компилятор догнал, и теперь дни оптимизации x64 находятся на одном уровне, если не лучше чем х86.

1 голос
/ 12 марта 2010

Нет, они занимают столько же места, так как наименьшее адресуемое пространство составляет 64 бита.

...