Dev-C++ i ogromny plik wynikowy

0

Witam

Czy może mnie ktoś oswiecić, czy da się coś ustawić, aby kod:

#include <iostream>
int main()
{
}

nie zajmował aż 1.20 MB?

Nie wiem o co chodzi, nie zmieniałem w sumie żadnych ustawień kompilatora, a przy takim kodzie, w którym faktycznie nic nie ma plik wynikowy jest ogromny. Wygląda to tak, jakby kompilator włączał cały plik nagłówkowy, a nie wiem czy w standardzie nie jest, że są dołączane tylko używane funkcje...

Pozdrawiam i czekam na odpowiedź... :)

0

Moim zdaniem masz ustawioną jakąs opcję w kompilatorze, b standardowo są dołączane tylko funkcj, krótych się używa...

0

Rzecz w tym, że nie grzebałem w ustawieniach.

Teraz zmieniłem Narzędzia - Opcje kompilatora -> Wytwarzanie/optymalizacja kodu -> Konsolidator i ustawiłem "Generuj informacje dla odpluskwiacza" na NO i kod się zmniejszył do 438 kB. Ale to i tak za dużo jak na "goły" program...

0

hmm dziwne , pownien zajmowac kolo 60kb bo to strumienie :-| [stuk]

0

Która wersja Deva?

0

Ja mam wersję 4.9.8.0

Co dziwne, przy tym wyłączonym generowaniu info dla odpluskwiacza, teraz zaobserwowałem też coś dziwnego:

Rozmiar pliku wynikowego dla:

#include <iostream>
int main()
{
}

to aż 438kBa rozmiar dla pliku źródłowego o wielkości 10.5kB to 448kB. Nie wiem czy to normalne, że przyrost pliku źródłowego o 10kB powoduje wzrost objętości pliku wynikowego o 10kB...

Coś tu jest nie tak, tylko co?

0

Masz wersje beta. Ściągnij sobie jakąś starszą to ne powinno być problemów.

0

Dzięki za radę, ale poprzednia wersja to chyba 4.0 (alb o 4.18), która IMHO się do niczego nie nadaje.

IOSTREAM trzeba dołączać z .h? Hehe
endl - nie wie co to jest...

Jakbym miał teraz wszystkie pliki z g++ przerabiać do deva to by mnie szlag trafił. Poczekam na nową stabilną wersję... :)

0

Ja mam wersję 4.9.6.0 i wszystko chodzi gładko, nie występuje żadne z wymienionych problemów.

0

Heh, tylko ja nie mogę nigdzie linka do tej wersji znaleźć, bo albo jest do tej 4.0 albo do najnowszej :(

Wiesz może czy ta Twoja wersja jest jeszcze gdzieś dostępna?

0

Ściągasz 4.0 i klikasz Narzędzia->Sprawdź czy są nowe uaktualnienia/pakiety

0

W tym przypadku zbyt wiele się nie zdziała. Nowe wersje DEV'a dorzucają coraz więcej śmieci. Dla porównania - program wyświetlający MessageBox'a:
wersja 4.9.2 - 4KB
wersja 4.9.8 - ~95KB
Kompilator jest dokładnie dokładnie sam(gcc). Jak tak dalej będzie, to niedługo dev przebije BCB rozmiarem plików wynikowych.

0

zna może ktoś jakiś sposób żeby zminiejszyć plik wynikowy (najprostszy kod) w Dec-C++ 4.9.9.0 do kilku kilobajtów?

0
franki napisał(a)

zna może ktoś jakiś sposób żeby zminiejszyć plik wynikowy (najprostszy kod) w Dec-C++ 4.9.9.0 do kilku kilobajtów?

  1. To zależy... C, C++, jakie biblioteki, system, faza księżyca, plamy na słońcu, ;) itd.
  2. Pisać mniej kodu źródłowego! :D
  3. Wyłączyć debug, profile, itp.; włączyć -Os
  4. Spakować plik UPX-em, FSG-em, itp.
  5. http://www.mingw.org/MinGWiki/index.php/executables%20large
  6. Przeszukać forum.
0
Deus napisał(a)

wersja 4.9.2 - 4KB
wersja 4.9.8 - ~95KB

4 kB?? To niemozliwe, taki plik nie dziala na pewno niezaleznie i wymaga dodatkowych dll-li. W BCB tez mozna ustawic tak ze exek bedzie zajmowal 4 kB ale co z tego??

Jak ktos chce miec male pliki to polecam LCC. Program tylko wyswieltajacy okno i bez zadnych zasobow zajmuje po spakowaniu UPX-em to tylko 3,5 kB. Tylko w MASM mozna tworzyc mniejsze pliki - taki program to okolo 2 kB. Ale porownojac latwosc C i asm wole jednak LCC.

W tej wersji dev-c++ ktora ja mam plik wynikowy to okolo 20 kB bez kompresowania - mysle ze jak na kompilator C++ to nie jest duzo - watpie w to ze jakikolwiek inny utworzy mniejszy kod.

0

othello, ehm, ten post Deusa i tak jest sprzed prawie roku...
Naprawdę nie ma sensu dyskutować o rozmiarze pliku, gdyż to zależy od tylu czynników... A z takich "mądrości" (nieuwzględniających tych czynników) to można się tylko trochę pośmiać :]

Tak btw. dodam, że gcc 3.4.2 produkuje plik, wyświetlający msgbox, o wielkości 2560 bajtów (działający, file-alignment=512, sekcja danych na string); oraz dokładnie 2kB (2048 bajtów) bez sekcji danych. Po spakowaniu FSG-em otrzymamy odpowiednio: 757 i 753 bajty. Niestety UPX nie radzi sobie z tak małymi plikami, za to zaje... kompresuje te większe. Oczywiście może to też być 896 bajtów (bez spakowania), z tym, że program już nie zadziała... Zdziwko?

A to, że niektórzy nie wiedzą dlaczego i jak - to już ich problem ;P

0

Ehm no rzeczywiscie post sprzed roku, ale ostatni post sprzed kilku dni a ja patrze tylko na ostatnia date ;)
Wydaje mi sie ze troche przesadziles, czynniki czynnikami, ok ale rozmiar zalezy przede wszystkim chyba od kompilatora i od ustawien kompilatora.

A z doswiadczenia wiem ze najmniejsze pliki tworzy wlasnie LCC - zawsze ponizej 10 kB (jak nie ma duzo zasobow) i mowie tu o wiekszych programach a nie jakis prosciutki wyswietlajacy MessageBox.

A w dev-c++ czy tym bardziej w BCB nie da sie tego dokonac, wiec w sumie takiej glupoty nie napisalem.

A ze moze sa jakies szczegolne przypadki, ze mozna zrobic np program bez sekcji danych....no coz czy to sie da zrobic dla powazniejszych programow niz wyswietlajace MessageBox? Watpie. Ogolnie zasada jest taka jak napisalem.

Prosty test - skompilowac ten sam program w dev-c++ i w LCC - jestem pewien ze w LCC wyjdzie mniejszy, chocbys nie wiem jakie czynniki uwzglednial.

0

GCC wymiata... czekam tylko na mingw w oparciu o gcc 4... a co do rozmiaru pod najnowszym mingw to zależy tylko od umiejętności programisty, gdzieś czytałem, że mingw 3.4.2 generuje najmniejsze pliki wykonywalne pod win32/z kompilatorów rzecz jasna/... a jak się jeszcze napisze samemu _MainCRTStartup i zignowuje biblioteki standardowe to już naprawde cudo /tylko, że przy ręcznym dołączaniu biblioteki standardowej c++ zaczynają sie dziać cuda/

0
othello napisał(a)

Wydaje mi sie ze troche przesadziles, czynniki czynnikami, ok ale rozmiar zalezy przede wszystkim chyba od kompilatora i od ustawien kompilatora.

No tak, ale czy jesteś pewien, że TWÓJ kompilator nie jest metopatą? :D

othello napisał(a)

A z doswiadczenia wiem ze najmniejsze pliki tworzy wlasnie LCC - zawsze ponizej 10 kB (jak nie ma duzo zasobow) i mowie tu o wiekszych programach a nie jakis prosciutki wyswietlajacy MessageBox.
A w dev-c++ czy tym bardziej w BCB nie da sie tego dokonac, wiec w sumie takiej glupoty nie napisalem.
A ze moze sa jakies szczegolne przypadki, ze mozna zrobic np program bez sekcji danych....no coz czy to sie da zrobic dla powazniejszych programow niz wyswietlajace MessageBox? Watpie. Ogolnie zasada jest taka jak napisalem.
Prosty test - skompilowac ten sam program w dev-c++ i w LCC - jestem pewien ze w LCC wyjdzie mniejszy, chocbys nie wiem jakie czynniki uwzglednial.

Taaa, sam wymieniłeś kilka czynników i twierdzisz, że to nie ma znaczenia i że nie da się tego zrobić w innym kompilatorze?!
No też dlatego TO JEST zależny od tylu rzeczy... A w C++ program skompilujesz w LCC? [pytanie retoryczne - oczywiście, że nie]
Dyskusja jest tu bez sensu.

0

No rzeczywiscie, dyskusja moze i jest bez sensu.
Chcialem tylko powiedziec, ze w zadnym innym kompilatorze C nie da sie otrzymac plikow mniejszych niz w LCC - to jest duza zaleta i jezeli ktos nie zamierza korzystac z C++ a pisac tylko w czystym C to warto o tym wiedziec.

Z tym chyba kazdy sie zgodzi.

0
othello napisał(a)

No rzeczywiscie, dyskusja moze i jest bez sensu.
Chcialem tylko powiedziec, ze w zadnym innym kompilatorze C nie da sie otrzymac plikow mniejszych niz w LCC - to jest duza zaleta i jezeli ktos nie zamierza korzystac z C++ a pisac tylko w czystym C to warto o tym wiedziec.

Z tym chyba kazdy sie zgodzi.

Ech, to jest tylko Twoja subiektywna opinia i "ktoś" o tym też powinien wiedzieć...

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