[#1] Duży plik exe
Co zrobić by plik po kompilacji był mały, jakie includy załączyć?

Otóż do programu załączam załączam standardowe includy opisane w podręcznikach do prgramowania c++, a plik wykonywalny ma wielkość rzędu 600 kb. Co zrobić by był mniejszy?

[#2] Re: Duży plik exe

@ZED^lM, post #1

załączam standardowe includy

Autorytetem nie jestem ale wygląda na to, że kawałek Twojego pytania który zacytowałem jest odpowiedzią na to pytanie. Używając funkcji biblioteki standardowej skazujesz się na zwiększony plik wykonywalny. Gdybyś używał funkcji czysto amigowych i nie dotykał biblioteki standardowej, plik wykonywalny byłby zapewne znacznie mniejszy. No ale wtedy tracisz przenośność kodu między platformami. W niektórych przypadkach to może mieć znaczenie, a w niektórych nie (zależy co robisz). Poza tym jak robisz jakieś wersje do debugowania to też plik może być większy niż rozsądek by nakazywał. Ale jeżeli chodzi o debugowanie to ja nic więcej nie napiszę, bo tutaj jestem zielony. Ja ciągle używam do tego tylko printf/kprintf i jakoś nie mogę się przekonać do debugerów (których i tak nie ma za dużo w ami-świecie). :)



Ostatnia modyfikacja: 16.03.2010 08:32:51
[#3] Re: Duży plik exe

@ZED^lM, post #1

Rozwiązanie ekstremalne jeżeli piszesz w C++:

-nostdlib -nostartfiles -fno-exceptions -fno-rtti

Ale płacisz za to cenę:

- sam musisz napisać kod startowy,
- żadnego używania rzeczy ze standardowej biblioteki C++,
- żadnego używania wyjątków.

W zasadzie można powiedzieć, że wtedy nie piszesz już w C++ tylko pewnym jego podzbiorze. Ale za to plik exe może być bardzo mały. Coś za coś.

[#4] Re: Duży plik exe

@ZED^lM, post #1

strip nazwa_exeka

[#5] Re: Duży plik exe

@ZED^lM, post #1

Z mojego doświadczenia to "Hello World" z użyciem skompilowane pod GCC zajmuje właśnie >500kB. Zrezygnuj z na rzecz . Oprócz tego użycie operatorów typu new i delete dodaje trochę do pliku wynikowego.

[#6] Re: Duży plik exe

@Minniat, post #5

Można użyć własnych wersji new() i delete().

[#7] Re: Duży plik exe

@ZED^lM, post #1

Generalnie jeżeli uczysz się C++ to olej wielkość pliku. Na początku krótki program będzie ważył dużo ale potem w miarę rozrastania się programu wielkość pliku nie będzie bardziej przyrastała niż "normalnie". Tak więc używaj takiego C++ żeby się zgadzało z książką/kursem, który aktualnie przerabiasz. Potem jak będziesz już coś konkretnego pisał to się przerzucisz na czysto amigowe rozwiązania. :)

[#8] Re: Duży plik exe

@ZED^lM, post #1

Dzięki za wszelkie sugestie. Fakt, faktem, że wraz z wielkością kodu nie wzrasta tak wielkość pliku exe. Co do efektu pracy to mam nadzieję, że już niedługo zaprezentuję.

[#9] Re: Duży plik exe

@ZED^lM, post #1

Tak naprawdę includy są drugorzędne w przypadku C/C++ - to linker decyduje o rozmiarze pliku wykonywalnego bo to on dodaje do niego kod z różnych modułów. Dobre linkery potrafią dołączyć tylko funkcje które są używane. Generalnie więc to ustawienia kompilatora i linkera decydują o tym jaki rozmiar ma plik wynikowy. Większość kompilatorów potrafi także optymalizować pod kątem rozmiaru.

Druga sprawa: generalnie kod C++ jest większy od C z powodu narzutu dodatkowego kodu na poziomie asemblera do obsługi klas - w praktyce to są tablice. Polecam artykuł: http://www.daniweb.com/forums/thread113056.html

Symbole i informacje dla debugera - tak jak pisano wcześniej, można się ich pozbyć. Znów może to załatwić linker na etapie swojej pracy pod warunkiem że ma taką opcję.

Trzecia uwaga - plik wykonywalny zawsze można spakować.

Nie dotykałbym się do kodu startowego modułu bez wyraźniej potrzeby bo łatwo coś zepsuć a potem szukać tego godzinami (a już na pewno na etapie uczenia się).
[#10] Re: Duży plik exe

@ZED^lM, post #1

Hej, a której wersji kompilatora używasz? Bo sprawdziłem i okazuje się, że wersja 2.7.0 GCC kompiluje bardzo niewielki kod wynikowy, np. "Hello World" zajmuje tam niecałe 6 kB, a z użyciem iostream troszkę ponad 60kB. Wcześniej jak kompilowałem przy użyciu kompilatora GCC z GeekGadgets (bodajże wersji 3) wychodziły bardzo duże pliki exe. Także może powrót do wcześniejszej wersji GCC da jakiś pozytywny rezultat przy zmniejszaniu kodu wynikowego.

Mówię tutaj o systemie OS3.x, pewnie pod MOSem wygląda to inaczej.

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem