Перейти к содержанию
    

VC2015 и VC2010. Файл вырастает в 3,5раза

Добрый день

вот такой вопрос, есть проект для VC2010, на выходе файл 182k

тот же самый проект, скомпиленный в VC2015 дает файл 614k

 

посему немного вопросов для тех, кто разбирается в тонкостях линковки:

- каким софтом можно узнать, что же так разрослось ?

- так как конечный результат хочу выложить в свободный доступ для желающих, то какой вариант выкладывать ?

 

вот эти файлики, если вдруг кому-то проще посмотреть

prj_VC2010_vs_VC2015.ZIP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день

вот такой вопрос, есть проект для VC2010, на выходе файл 182k

тот же самый проект, скомпиленный в VC2015 дает файл 614k

Очевидно, что в более новой среде используются более "свежие" библиотеки.

Возможно, в чем-то отличаются ключи компиляции и линковки.

 

зы. Стоит ли того эта "мышиная возня"? Ведь оба этих файла легко уместятся даже на архаичную дискету, даже на античную 5-дюймовую, которые нынче можно найти лишь в музеях :biggrin:

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кэп, просто человеческое любопытство, не более чем.

Ну раз нет так нет

Все, как должно быть, программы больше, диски тоже, скорости по сети аналогично... Вы все должны вносить вклад в развитие потребкультуры, в соответствии с политикой партии заокеанских буржуев :biggrin:

 

ЗЫ. Вы заметили, насколько больше стал дистрибутив 15 студии от 10 ?? Вот похоже и на выхлопе прямая зависимость...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это "нормально". Компилю сейчас под VS2017 проект, тот же проект скомпилённый VS2005 - даёт примерно в 4.5 раза меньший exe-ник. И это при полной оптимизации.

Такова уж нынешняя тенденция - ресурсов становится больше, значит их надо сожрать. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кэп
Кэп, есть более подходящие ресурсы для того, чтобы задавать подобные необычные вопросы по VS -

там наверняка найдутся гики, которые готовы удавиться ради нескольких лишних килобайтов в exe-ке ;)

 

Такова уж нынешняя тенденция - ресурсов становится больше, значит их надо сожрать. :(

в новой stdlib банальный printf теперь умеет выводить строку через встроенный vpn-сервер и на гугль-облако :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в новой stdlib банальный printf теперь умеет выводить строку через встроенный vpn-сервер и на гугль-облако :biggrin:

И что? Я это не использую. А значит линкёр должен это выкидывать из exe.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И что? Я это не использую. А значит линкёр должен это выкидывать из exe.

Это нормальный линкер так делает, а тут по-ходу как "звезды лягут" :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это нормальный линкер так делает, а тут по-ходу как "звезды лягут" :)

Там не только линкёр, а и компилятор - туповатые. Даже в VS2017 на полной оптимизации что творит:

; 397  :     nv0 = chain[0]->nv;
  mov eax, DWORD PTR [edi+104]
  mov eax, DWORD PTR [eax+4]
  mov DWORD PTR [edi+4], eax
; 398  :     fmtn0 = chain[0]->fmt[ixf0 = chain[0]->ixf].n;
  mov eax, DWORD PTR [edi+104]
  mov ecx, DWORD PTR [eax+8]
  mov DWORD PTR [edi+8], ecx
  add ecx, ecx
  mov eax, DWORD PTR [edi+104]
  mov eax, DWORD PTR [eax+ecx*8+24]
  mov DWORD PTR [edi+12], eax

где chain - массив указателей на структуры.

Вместо того, чтобы использовать значение указателя chain[0] ранее загруженное в регистр, зачем-то постоянно перечитывает его из памяти (DWORD PTR [edi+104]). volatile нет.

Даже IAR в этом случае использовал бы копию указателя из регистра, имхо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там не только линкёр, а и компилятор - туповатые.

А предыдущие версии VS тоже такую дичь плодят?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А предыдущие версии VS тоже такую дичь плодят?

Не знаю. Надо будет дома на VS2005 проверить. На работе VS2005 уже не ставится на win64 :(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Виртуалка в помощь :)

Кстати. Вопрос ко всем. Может кто нибудь выложить образ или CRC образа winXP для VirtualBox который раздавался с сайта Майкрософт? Сейчас там только win7x32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати. Вопрос ко всем. Может кто нибудь выложить образ или CRC образа winXP для VirtualBox который раздавался с сайта Майкрософт? Сейчас там только win7x32.

Оно?

 

Там не только линкёр, а и компилятор - туповатые. Даже в VS2017 на полной оптимизации что творит:

; 397  :     nv0 = chain[0]->nv;
  mov eax, DWORD PTR [edi+104]
  mov eax, DWORD PTR [eax+4]
  mov DWORD PTR [edi+4], eax
; 398  :     fmtn0 = chain[0]->fmt[ixf0 = chain[0]->ixf].n;
  mov eax, DWORD PTR [edi+104]
  mov ecx, DWORD PTR [eax+8]
  mov DWORD PTR [edi+8], ecx
  add ecx, ecx
  mov eax, DWORD PTR [edi+104]
  mov eax, DWORD PTR [eax+ecx*8+24]
  mov DWORD PTR [edi+12], eax

где chain - массив указателей на структуры.

Вместо того, чтобы использовать значение указателя chain[0] ранее загруженное в регистр, зачем-то постоянно перечитывает его из памяти (DWORD PTR [edi+104]). volatile нет.

Даже IAR в этом случае использовал бы копию указателя из регистра, имхо.

это не оптимизация. Можно код исходный?

post-5493-1533064379_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...