Jak zmniejszyć rozmiar pliku exe?

0

Witam serdecznie!

Mój problem wygląda mi z grubsza na dość banalny, jednak po dość długim przeszukiwaniu sieci nie znalazłem żadnego rozwiązania.
Otóż w moim programie załączam następujące pliki nagłówkowe:

#include <cstdlib>
#include <iostream>
#include <stack>
#include <sstream>
#include <string>

Po kompilacji rozmiar pliku exe to aż 1,21 MB. Domyślam się, że problemem jest załączanie informacji do debugowania (choć w ustawieniach kompilatora dałem, żeby nie generował danych dla odpluskwiacza) oraz brak optymalizacji (choć tę też włączyłem w ustawieniach). Proszę o pomoc w tym temacie, bo ponad megabajt, to już trochę przegięcie, jak na mały program konsolowy.

0

http://www.bitsum.com/
UPX

Problemem jest dołączanie całych bibliotek z includa, która każda swoje waży. Optymalizacja nie wytnie ich bo one już są zoptymalizowane. Z tego co się orientuje stara się usywa kod "jej zdaniem niepotrzebny", np: petlę opóźniajace, niektóre przypisania, algorytm to robiący jest dosyć skomplikowany i do tego masz różne stopnie optymalizacji. Im "niżej" piszesz tym bardziej trzeba uważać coby kompilator nie usunął czegoś co jednak jest niezbędne.

To co podałem wyżej "optymalizuje" już gotowe exeki. Szukując kodu zdublowanego, skoków etc. Metoda jak to działa też jest trochę skomplikowana. Chcesz mieć mniejszy kod i nie korzystając z zewnętrznych narzędzi. To staraj się pisać proste rzeczy sam a nie zaciągać je do projektu. Coś za coś wygoda i gotowe wzorce ale za wielkość.

0

Czyli z wykorzystaniem tych wszystkich bibliotek i bez używania UPX-a nic nie da się zrobić? (nie wierzę... :P)

nexodg napisał(a):

Chcesz mieć mniejszy kod i nie korzystając z zewnętrznych narzędzi. To staraj się pisać proste rzeczy sam a nie zaciągać je do projektu. Coś za coś wygoda i gotowe wzorce ale za wielkość.

Korzystam z biblioteki standardowej, bo (podobno :)) są tam zawarte rozwiązania najbardziej optymalne. Nie czuję się na siłach z nimi konkurować, a nie chcę też robić czegoś źle.

0

Jaki system? jaki kompilator? jakie ustawienia kompilatora (jak wygląda proces budowania twojej aplikacji)? Jak masz dołączone biblioteki (include nie ma tu nic do rzeczy)?
Nie zdziwiłbym się, gdybyś miał włączony tryb budowania debug (informacje dla debuggera zajmują dość sporo miejsca).

0
MarekR22 napisał(a):

Jaki system? jaki kompilator?

Sorki, dałem info w tagach, ale jak widać, to ich za bardzo nie widać. ;) Windows, wxDev-C++

MarekR22 napisał(a):

jakie ustawienia kompilatora (jak wygląda proces budowania twojej aplikacji)? Jak masz dołączone biblioteki (include nie ma tu nic do rzeczy)?

Really, don't know. Nic nie zmieniałem za bardzo w konfiguracji, poza próbami wyłączenia dodawania niepotrzebnych śmieci (które i tak nic nie zmieniły) i dodaniem do parametrów kompilatora -Wall -pedantic-errors -fno-nonansi-builtins -std=c++98

MarekR22 napisał(a):

Nie zdziwiłbym się, gdybyś miał włączony tryb budowania debug (informacje dla debuggera zajmują dość sporo miejsca).

To bardzo prawdopodobne. Nie mogę się nigdzie dopatrzeć opcji, gdzie można to przestawić.

0

Uroki używania GCC pod Windows ;) Nie, żebym coś doradzał, ale informuję, że Visual generuje mniejsze pliki exe. Binarki pod Linuksem za to są małe, ponieważ korzystają z "zewnętrznej" biblioteki standardowej, zamiast wpakowywać całość do pliku wykonywalnego.

0

Od VC++ odrzuca mnie ilość zajmowanego przez niego miejsca.

1

W takim razie to jest jakaś fobia... Przy współczesnych standardowych dyskach 1TB, 2TB martwić się o miejsce? O to, że plik exe zajmuje 1,21MB, albo o rozmiary Visuala... Please...

0

wxDev-C++ to IDE które z a ciebie ustawa całe multum opcji kompilatora (zwykle jest to mingw).
Poszukaj w opcjach by zmienić build-a z trybu DEBUG do RELEASE i będzie po sprawie (zwykle jest to jeden guzik/opcja menu).
Standardowe biblioteki C++ w mingw też zwykle są dołączane przez dll-kę (chyba, że się wymusi się linkowanie statyczne opcją kompilatora), więc to nie od tego masz dużego exe-ka.

0
MarekR22 napisał(a):

Poszukaj w opcjach by zmienić build-a z trybu DEBUG do RELEASE i będzie po sprawie (zwykle jest to jeden guzik/opcja menu).

Szukam już od wczoraj. :)

0

Jak chcesz uzyskać bardzo małą wielkość pliku wykonywalnego (liczonego w dziesiątkach kilobajtów) oraz absolutny brak zewnętrznych zależności użyj kompilatora z Windows Driver Kit. Musisz jednak zrezygnować wtedy ze standardowej biblioteki języka C++ i używać tylko tej z C oraz odwołań do API systemowych.

0

nikt jeszcze nie napisał o parametrze -g, który usuwa informacje dla debugera, a ma znaczący wpływ na rozmiar exeka.

0

W trybie debug plik wykonywalny będzie zajmował zawsze więcej. W release zajmuje mniej. Ja pamiętam jak kompilowałem program(bodajże gcc ale nie jestem pewien) to w trybie debug program zajmował około 450KB a jak dałem release to było 20KB

0

Robcio, ok. Do tego już doszliśmy. :) Kwestia, jak to włączyć w wxDev-C++.

1 użytkowników online, w tym zalogowanych: 0, gości: 1