Размер 64-разрядных, dll на 50% больше, чем 32-разрядный

Emacs. Вы можете взглянуть на JDEE , чтобы начать.

10
задан Amit G 19 October 2009 в 16:33
поделиться

3 ответа

Возможно, ваш код содержит много указателей.

Бесплатный обед окончен

....

(В сторону: Вот анекдот для демонстрации "Космос - это скорость", недавно поразивший меня команда компилятора. Компилятор использует та же исходная база для 32-битных и 64-битные компиляторы; код просто скомпилирован как 32-битный процесс или 64-битный. 64-битный компилятор получил большую базу производительность при работе на 64-битной ЦП, в основном потому, что 64-битный У процессора было гораздо больше регистров для работы с другой производительностью кода и функции. Все хорошо. Но что о данных? Переход на 64 бита не изменил размер большей части данных в памяти, за исключением того, что, конечно, указатели , в частности, теперь были вдвое больше , чем были раньше. Так получилось, что наш компилятор гораздо больше использует указатели в своих структурах внутренних данных , чем большинство других приложений когда-либо использовали бы. Потому как указатели теперь были 8 байтов вместо 4 байтов, чистое увеличение размера данных, мы увидел значительный рост Рабочий набор 64-битного компилятора. Который больший рабочий набор вызвал штраф за производительность, который почти точно компенсировать выполнение кода повышение производительности, которое мы получили от переход на более быстрый процессор с больше регистров. На момент написания этой статьи 64-битный компилятор работает одновременно скорость как 32-битный компилятор, даже хотя исходная база такая же для и 64-битный процессор предлагает лучшая производительность обработки необработанных данных. Пространство - это скорость.)

13
ответ дан 3 December 2019 в 20:42
поделиться

x86-64 has more registers. As a result, opcodes need more bits to specify them. Also, per x86 tradition you can specify parts of a register, and you now have a 32 bit partial register. Instructions that don't use registers are rare, so these change affects almost every instruction. Since x86-64 is still a CISC variable-length ISA, it doesn't mean that each instructions grew from 32 to 64 bits, but there is a definite growth.

Another change is that movq, the opcode to set a register to a constant requires 64 bit constants (but other constants in opcodes still are 32 bits)

3
ответ дан 3 December 2019 в 20:42
поделиться

Размер указателя увеличился вдвое, поэтому, если в вашем коде много указателей, ваш исполняемый файл может легко вырасти на 50%.

2
ответ дан 3 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: