Avatar billede svinth Nybegynder
14. marts 2000 - 07:54 Der er 14 kommentarer og
1 løsning

MVC++6 && exefils størrelse.

Hvem kan få programmet:
int main()
{
  return 0;
}

til at fylde så lidt så muligt, kompileret i MVC++6?
Hvor sørgeligt det end lyder, er mit bedste hidtidige bud 86.065 bytes :)
Så kom med et bytetal, og en udførlig forklaring på hvordan det er gjort.

Svante

PS: Ved lige små programmer vinder den der først indsender det.
Avatar billede svinth Nybegynder
14. marts 2000 - 09:03 #1
Måske noget commandline trylleri (Nej, jeg kan endnu ikke selv få det til at virke!)
Avatar billede jinxed Nybegynder
14. marts 2000 - 09:23 #2
Med et tomt projekt(console)+ en cpp fil får jeg 24.576 lige meget hvad jeg gør i settings(har prøvet det før)
Avatar billede svinth Nybegynder
14. marts 2000 - 09:31 #3
Arghhh...det er ved disse settings jeg får ovenstående :(
Dog SKAL jeg vælge Win32(console), bruger du MVC++6???
Hvis ja, må du siges at føre, selv om jeg ikke kan se hvordan?

Svante
Avatar billede soepro Nybegynder
14. marts 2000 - 09:37 #4
Du kan starte med at lave dit program om til en console-application - og dernæst fjerne alle options omkring sammen-linkning med MFC, OWL og klassebiblioteker, samt al dannelse af debug information - både af compiler & af linker. Dernæst skal du slå alle exception handlers fra.

Under C++ Builder reducerer det størrelsen fra ca. 64Kb til 48Kb, men så kan jeg heller ikke komme længere ned.

Grunden til at du ikke komme længere ned, er at Windows compilerne lægger en masse standard kode ind for at "skidtet" kan køre under windows - det er bl.a. ting som tilføjelse til task-lister, oprettelse af ikon i 'start' menuen osv., samt kode til parsing af evt. parametre.

Hvis du vil af med dette (- parsing af parametre), er der ingen vej uden om at anvende end DOS-orienteret compiler, f.eks. BC 5.02, (10.052) eller endnu bedre TC++ 3.0. (5.860) Selve koden fylder i sidstnævnte compiler 12 (!) bytes - resten er standard funktionalitet.
Avatar billede jinxed Nybegynder
14. marts 2000 - 09:40 #5
Ja jeg bruger MVC++6, men console hedder Win32 Console Application

Der er mange kopiler optimeringer fra version til version, f.eks. et program lavet i v. 4 rekompilerede jeg i v. 6. Execs størrelse faldt fra 147k til 116k med fuldstændigt den samme sourcekode !?

Dette er hovedsaligt pga. /OPT:REF hvor kopileren kun bruger de ting man anvender selvom man har included en masse, f.eks. når man ikke bruger cout,cerr,clog eller den sidste som jeg aldrig bruger(og derfor ikke kan huske hvad hedder) så includer den ikke comdlg.dll. Resultat execens størrelse falder med adskillige k.

Jinxed ; ]
Avatar billede svinth Nybegynder
14. marts 2000 - 09:41 #6
Hvad med com filer, kan de laves i MVC++6? Jeg har selv lavet en comfil på 2 bytes i notepad (uendelig løkke :). Men hvordan laves det eventuelt i de store compilere?

Svante
Avatar billede soepro Nybegynder
14. marts 2000 - 09:42 #7
I MVC kan du -mig bekendt- flytte en hel del kode til standard (Microsoft) DLL'er, ved at lave en version som anvender DLL-libraries fremfor at linke koden direkte ind i EXE'n. C++ Builder kan ikke i samme grad gøre dette (sikkert fordi Microsoft ikke ønsker at andre skal kende DLL'erne), hvilket sikkert er grunden til at man kan komme ned på 24Kb i MVC og kun 48Kb i BCB.
Avatar billede jinxed Nybegynder
14. marts 2000 - 09:45 #8
I MVC++6 bruger et empty project(win32 console application) hverken MFC, OWL eller noget som helst anden, men jeg ved ikke om version 5 gør det.
Avatar billede soepro Nybegynder
14. marts 2000 - 09:46 #9
Du kan jo (også) anvende ASM i MVC & BCB, men det fjerner jo ikke standard-koden. En kollega lavede på et tidspunkt sine egne 'startup' kode versioner til TC++ 3.0 for at reducere kodestørrelsen til et minimum, når han f.eks. ikke skulle bruge kommando-linie parametre, åbne standard filer osv. - men er det ikke lidt "overkill" i Windows-miljø ?!? Jeg mener, (relativt) store exe-filer er en af de "downsides" vi må leve med, hvis vi vil anvende alle de gode ting i windows.
Avatar billede jinxed Nybegynder
14. marts 2000 - 09:49 #10
Kald af WinAPI'erne linkes vel også til dll filer i BCB?
Avatar billede svinth Nybegynder
14. marts 2000 - 09:58 #11
Jo vist er det overkill, men det er det eneste jeg vil. Overkill'e helt vildt. Og det IRRITERER mig, at man ikke kan presse koden ned på eksempelvis de 12 bytes, som du nævner ovenfor, soepro. Det MÅ da være muligt, selv om det er en kæmpe enterprise compiler ting, at lave de små ting også? Muligvis ikke let, men MULIGT?
Bedre bud på spørgsmålet ønskes!

Svante
Avatar billede soepro Nybegynder
15. marts 2000 - 08:24 #12
Jeg kan ikke få BCB længere ned (eller TC++ 3.0 for den sags skyld), så det er mit bedste bud.
Avatar billede skovlunde Nybegynder
16. marts 2000 - 15:56 #13
Ligegyldigt hvor meget du prøver kan du ikke komme ret meget længere ned i koden. Windows exe filer er PE filer som har et predefineret format der skal overholdes. Compilere, som de skumle væsner de nu er, gør det let for sig selv ved at forcere alle funktioner på forskellige byte boundaries i PE formatet, samt 'aligne' alting på en måde der gør det let for loaderen.

Den eneste mode du kan reducere det yderligere på er ved at åbne din Hex editor og så klippe og klistre din exe fil til den rette størrelse - efter PE formattet selvfølgelig. Så kan du vel nok få den ned under de 20 KB.
Dit program vil derefter sikkert også køre langsommere end ved et almindeligt kompileret program.

Rigtig god fornøjelse..:=)
Avatar billede svinth Nybegynder
17. marts 2000 - 07:10 #14
Jeg giver op :) Pointene går til Jinxed, der svarede på spørgsmålet i MVC++ regi.

Svante

PS: Hvad er PE filer?
Avatar billede skovlunde Nybegynder
17. marts 2000 - 15:19 #15
Portable Executable
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester