пятница, 25 февраля 2011 г.

размер программ под win 64

а вот например поскольку писать особо не о чем сорцы одной из моих программ превысили сегодня некий психологически важный барьер в 2 Mb, то решил я посмотреть, сколько одна и та же версия программы занимает под 32 и 64 бита.
Прога - ничего особенного, обычный сетевой сервер, сделанный в виде windows service. Принимает всякое, обрабатывает в несколько потоков, отдает дальше. Из системных библиотек кроме обычного набора используются только winsock & rpcrt4. asm вставок нет, потому перенос на 64бита был относительно простым. Собрано на visual studio 2008 со статически слинкованным runtime.
В табличке приведен VirtSize per section и соотношение между размерами 64 и 32битных версий
Имя секциииwin32win64Ratio
.text101550513125861.29
.rdata5704267207181.26
.data3119323554401.14
.reloc79806271020.34
Отсюда можно заметить всякое интересное
Например в 64битной версии релоки (прога слинкована с поддержкой aslr) значительно меньше - подозреваю, что все они для релоцирования данных, ибо адресация относительно RIP минимизирует их использование в коде.
Кроме того под 64бита все обработчики исключений лежат в отдельной секции .pdata - еще + 59124 байт. Забавно что из содержимого .pdata можно точно установить адреса и размеры по крайней мере ф-ций, содержащих exception processing
Общий итог - прога под 64бита весит на 25% больше 32битного аналога. Подозреваю что для любых более-менее больших программ это соотношение должно быть примерно таким всегда.
Интересно также что при работе 64битная версия стабильно использует памяти на 35-40% больше при одинаковых нагрузках и числе клиентов

Комментариев нет:

Отправить комментарий