Visual Studio C ++ добавляет «мусор» в мои программы - PullRequest
2 голосов
/ 31 марта 2010

Я посмотрел двоичные файлы, созданные MSVC 2010 из моего исходного кода, и увидел, что все заполнено "мусором". (Не тот мусор, который называет себя «мой код»)

Я не знаю, как объяснить, но в мои исполняемые файлы добавляется слишком много ненужной информации, например:

  • Множество сообщений об ошибках по умолчанию от Microsoft, я не хочу их
  • Настройки схемы XML (Почему!?)
  • Другие вещи, не важные для выполнения основной программы

Как я могу остановить MSVC делать это? Должен ли я перейти на GCC?

Во всех других программах (написанных также на C ++, от текстовых процессоров до игр) этот мусор просто не существует.

Ответы [ 5 ]

7 голосов
/ 31 марта 2010

Множество сообщений об ошибках по умолчанию от Microsoft, я не хочу их

потому что вы используете среду выполнения C / C ++ (например, malloc, printf, strcpy)

Настройки схемы XML (Почему!?)

Таким образом, вы получаете соответствующую обработку UAC (контроль учетных записей пользователей), актуальный comctrl (который требуется для применения элементов управления Windows в вашей программе) и указывает, какой msvcrt.dll использовать.

редактирование: Еще одна особенность, которая вызывает дополнительный код, - это размещение файла cookie в стеке и соответствующий код для проверки файла cookie. см. http://blogs.msdn.com/michael_howard/archive/2007/04/03/hardening-stack-based-buffer-overrun-detection-in-vc-2005-sp1.aspx для получения дополнительной информации.

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

Почему вы считаете, что они не важны для работы приложения? Что если они есть? О каких «других вещах» ты упоминаешь?

Если вы удалите сообщения об ошибках по умолчанию, пользователь может на законных основаниях столкнуться с этой ошибкой, тогда ему не будет отображаться сообщение, что сделает его еще хуже. (Как уже упоминалось в другом ответе, они, скорее всего, взяты из библиотеки времени выполнения C, и, скорее всего, вашей программе это нужно!)

XML может быть встроенным манифестом, который определяет некоторые требования к DLL. Это помогает предотвратить ситуацию «ада DLL», когда программы зависят от разных версий DLL с одинаковыми именами. Среди прочего, он указывает точную информацию о версии DLL, так что вы никогда не столкнетесь с этой безобразной ситуацией. Опять же, это то, что вы хотели бы.

Библиотеки и настройки компилятора для большинства компиляторов C ++, скорее всего, добавят «мусор» (я бы просто назвал это данными библиотеки) из-за всех полезных функций, которые они предоставляют, избавляя вас от необходимости решать эти проблемы снова и снова сами. Если вам все еще не нравится это - прекратите использовать компиляторы и начните использовать ассемблер. Затем вы можете указать точно , что есть и чего нет в окончательной скомпилированной программе, но вы, вероятно, в конечном итоге заново изобретаете колесо ...

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

Ссылка на libctiny . Я создал 4kB EXE-файлы таким образом.

0 голосов
/ 31 марта 2010

То, что вы видите, не является "мусором".

Множество сообщений об ошибках по умолчанию от Microsoft, я не хочу их

Предположительно, вы действительно хотите использовать библиотеки, на которые ссылаетесь, или не будете ссылаться на них.

Настройки схемы XML (Почему!?)

Этот XML является манифестом вашего приложения . Почему это там? Потому что вы попросили компоновщик добавить его. Посмотрите на командную строку, которую вы передаете компоновщику. Он будет включать параметры /MANIFEST и /MANIFESTFILE.

Другие вещи, не важные для выполнения основной программы

Если вы не знаете, кто они, откуда вы знаете, что они не важны?

0 голосов
/ 31 марта 2010

Кроме перехода на другой компилятор вы можете попробовать оптимизацию компилятора. Включите «связывание на уровне функций», «оптимизацию всей программы» и удаление неиспользуемых данных / кода - скорее всего, какой-то код / ​​данные, которые вам не нравятся, на самом деле не используются, и компоновщик может просто устранить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...