#include <string>добавление ~ 43 КБ в мой exe - PullRequest
2 голосов
/ 17 мая 2010

Я использую Code :: Blocks для написания своей программы, и когда я включаю <string> (или <iostream>), размер моего exe увеличивается. Моя программа очень проста, и мне нужно, чтобы она была маленькой <20 КБ. Я почти уверен, что это происходит из-за того, что Комитет по стандартам C ++ поменял старые версии .h на многие новые библиотеки без .h. Но как бы мне не добавить ~ 43kb? Существуют ли настройки для Code :: Blocks, чтобы он не добавлял лишних килобайт, или я могу использовать другую нативную библиотеку? </p>

Ответы [ 5 ]

10 голосов
/ 17 мая 2010

Если размер - ваша проблема № 1 (и если вам нужно, чтобы размер <20 КБ, то, вероятно, так и есть), тогда стандартная библиотека C ++, вероятно, не подходит. На самом деле, <em>любой C ++ вообще (RTTI, исключения и т. Д.), Вероятно, является плохой идеей, и вам лучше было бы просто придерживаться прямой C.

6 голосов
/ 17 мая 2010

Ни <string>, ни <iostream> не переименованы / изменены заголовки C. Они оба новички в C ++. Если вы хотите придерживаться библиотек C, вы можете использовать <cstring> и <cstdio> (среди прочих), которые являются версиями C ++ заголовков C "string.h" и "stdio.h".

0 голосов
/ 17 мая 2010

Не забудьте построить свое приложение в режиме выпуска вместо -debug. Это значительно уменьшит размер вашего приложения.

0 голосов
/ 17 мая 2010

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

0 голосов
/ 17 мая 2010

Версии заголовка без .h не отличаются от других. Версии .h в основном предоставляются для совместимости. Дополнительный размер будет класс string, и размер не слишком удивителен. Если вы не хотите использовать нулевой размер: не используйте std :: string, но char*.

Следующим шагом будут параметры компилятора. Большинство компиляторов имеют возможность отключить RTTI и оптимизировать по размеру. -Os -fno-rtti будет правильным переключателем для GCC.

В противном случае применяются все стандартные приемы оптимизации размера:

  • Не иметь статических данных, всегда вычислять
  • Не использовать виртуальные функции
  • Уплотняйте вещи, используйте битовые поля
  • Может быть, C лучше, чем C ++ (это подлежит обсуждению.)
...