Компилятор Windows C ++ для самых маленьких исполняемых файлов - PullRequest
2 голосов
/ 31 декабря 2011

ребята, я хочу начать программировать на C ++.Я написал несколько программ на vb6, vb.net, и теперь я хочу получить знания в C ++, мне нужен компилятор, который может компилировать мой код для самых маленьких приложений Windows.Например, есть компилятор языка Basic под названием PureBasic, который может сделать размер отдельного приложения Hello world размером 5 КБ, а простая программа-сокет, которую я скомпилировал, была всего 12 КБ (без каких-либо DLL-файлов и исполняемых файлов).Я знаю, что это удивительно, поэтому я хочу что-то подобное для C ++.

Если я ошибаюсь и нет такого рода компилятора Windows, может кто-нибудь дать мне сайт или книгу, которая может научить меня, как уменьшить C ++размер исполняемого файла или как использовать вызовы Windows API?

Ответы [ 5 ]

5 голосов
/ 31 декабря 2011

Компилятор Microsoft Visual C ++, например ... Вам просто нужно отключить ссылки на среду выполнения C (/NODEFAULTLIB), и ваш исполняемый файл будет размером всего 5 КБ.Есть только одна проблема: вы не сможете использовать почти ничего из стандартной библиотеки C и C ++, а также стандартных функций C ++, таких как обработка исключений, операторы new и delete, арифметика с плавающей точкой и многое другое.Вам нужно будет использовать только чистые функции ОС (например, создавать файлы с CreateFile, выделять память с HeapAlloc и т. Д.).

4 голосов
/ 31 декабря 2011

Я должен был сделать это много лет назад с VC6. Это было необходимо, потому что исполняемый файл должен был передаваться по проводам на целевой компьютер, где он будет работать. Поскольку его можно было отправить через модемное соединение, оно должно быть как можно меньше. Чтобы сжать исполняемый файл, я опирался на два метода:

  1. Не используйте среду выполнения C или C ++. Скажите компилятору не связывать их. Реализуйте всю необходимую функциональность, используя подмножество Windows API, которое было гарантировано доступно на всех версиях Windows в то время (98, Me, NT, 2000).
  2. Скажите компоновщику объединить все сегменты кода и данных в один. Я не помню переключателей для этого и не знаю, возможно ли это, особенно с 64-битными исполняемыми файлами.

Окончательный размер исполняемого файла: ~ 2K

1 голос
/ 31 декабря 2011

Современный настольный ПК под управлением Windows имеет как минимум 1 ГБ ОЗУ и огромный жесткий диск, бесполезно беспокоиться о размере простой программы, которая не является представителем какого-либо реального приложения.

Большая часть размерапрограмма «Hello world» на любом языке имеет фиксированные накладные расходы, связанные с созданием среды выполнения, загрузкой и запуском кода.Для любого нетривиального приложения вы должны быть более заинтересованы в скорости, с которой увеличивается размер кода по мере добавления функциональности.И в этом смысле похоже, что код C ++ в любом компиляторе довольно эффективен.То есть ваша PureBasic-программа, которая мало или ничего не делает, может быть меньше, чем эквивалентная программа на C ++, но это не обязательно так, когда вы встроили полезную функциональность в код.

@ user: C ++действительно генерирует небольшой объектный код, однако, если код для printf () (или cout <<) статически связан, результирующий исполняемый файл может быть довольно большим, потому что printf () имеет много функциональных возможностей, которые не используются в «мире приветствия»Программа так избыточна.Попробуйте, например, использовать put (), и вы обнаружите, что код меньше. </p>

Более того, вы уверены, что сравниваете яблоки с яблоками?Некоторые среды выполнения зависят от динамически связанной библиотеки времени выполнения или виртуальной машины, которая предоставляет функциональные возможности, которые могут быть статически связаны в программе на C ++.

0 голосов
/ 04 августа 2012

Мне не нравится отвечать на мертвый пост, но поскольку ни в одном из ответов это не упоминается (кроме ответа Мат) ...

Повторяйте за мной: C ++! = (Vb6 || vb.net || basic). И я не только упоминаю синтаксис, стиль кодирования C ++ обычно отличается от стиля в VB, так как программисты C ++ стараются сделать вещи, как правило, лучше, чем программисты vb ...

P.S .: Нет, в мире C ++ нет места копированию-вставке. Извините, должен был сказать это ...

0 голосов
/ 31 декабря 2011

Я не знаю, почему вы заинтересованы в такого рода оптимизации до изучения языка, но в любом случае ...

Не имеет большого значения, какой компилятор вы используете, но как выиспользуй это.Выберите компилятор, например, Visual Studio C ++ или MinGW, и прочитайте его документацию.Вы найдете информацию о том, как оптимизировать компиляцию по размеру или производительности (обычно при оптимизации по размеру вы теряете производительность и наоборот).

Например, в Visual Studio вы можете минимизировать размерисполняемого файла путем передачи параметра / O1 компилятору (или Project Properties / C-C ++ /Optimization).

Также не забудьте скомпилировать в режиме «релиз», иначе ваш исполняемый файл может быть полонсимволы отладки, которые увеличат размер вашего исполняемого файла.

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