производительность — Как сделать программы, скомпилированные под Dev C ++ меньше?

Я использую версию 5.4.0 и самая простая программа (пустой экран) имеет почти один мегабайт.
Например, после компиляции эта простая программа имеет размер 1 276 КБ. Но удаление #include делает файл очень маленьким: 27 КБ.

#include<iostream>
using namespace std;

int sum(int a){
if(a>1)
return sum(a-1)+a;
else
return 1;
}

int main(){

int a=1;

while(a>=0){
cout<<"a = ";
cin>>a;
cout<<"1+...+a = "<<sum(a)<<endl;
}

return(0);
}

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

-2

Решение

Вот несколько идей из моего опыта:

Мертвый код

Просмотрите весь исходный код и удалите неиспользуемый код, как неиспользуемые функции, так и блоки операторов, которые не будут выполнены. Используйте статический анализатор кода, чтобы помочь найти их.

Printf

Не использовать printf если не нужно.
В нем много кода, особенно для форматирования чисел с плавающей запятой.

Связывание в неиспользуемых функциях

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

Показатели отладки и выпуска

Вы измеряете отладку (с символами) или выпуск (без символов)?
Вы измеряете версию статической библиотеки или только код без динамических библиотек?

Встроенные функции

Просмотрите все встроенные функции.
Преобразуйте большие встроенные функции в не встроенные.

Шаблоны

Удалите общий код из шаблонов и функций.

статический & Глобальные инициализированные переменные

Уменьшите количество статически и глобально инициализированных переменных.
Инициализация занимает место в вашем исполняемом файле.
Объявите постоянные переменные как static const где это возможно.

Строки и текст

Поместите обычные текстовые литералы в один файл и возвращайте ссылки или постоянные указатели на них.
Это поможет компилятору объединить дубликаты строк в разных модулях.

Общие фрагменты кода

Анализируйте функции для общих фрагментов кода. Разделите их на отдельные функции или методы.

Динамические библиотеки

Переместите некоторые функции в динамические библиотеки. Пусть ОС определит, когда использовать код.

Будущая функциональность

Удалите весь код, относящийся к будущим функциям, которые в данный момент не выполняются.

Переместить данные в файл данных

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


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

Некоторые предложения снизят производительность вашего приложения. Извините, это время / память обмен: вы можете сэкономить память, но это займет больше времени выполнения (например, поля упаковки).

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector