siDDis Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 Den berømte hello world koden: #include <iostream> int main() { std::cout << "Hello world!" << std::endl; return 0; } Ferdig kompilert executable blir heile 41kb med GCC. Finnes det ikkje måter å få den mindre på? Er det mogleg å få det under 1kb? Lenke til kommentar
einaros Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 Ferdig kompilert executable blir heile 41kb med GCC. Finnes det ikkje måter å få den mindre på?Er det mogleg å få det under 1kb? 8082157[/snapback] Blir fort stort når standardbibliotek og annet tøys skal linkes inn. Det finnes dog plenty packer-applikasjoner som du kan bruke for å komprimere applikasjonen din noe. Du får leke litt med linkerinnstillinger, og hvilke bibliotek du bruker, for å se om du ikke får den enda litt mindre. PECompact er én applikasjon for windows, men det finnes tilsvarende for *nix også. Gjør noen søk. Skal du ha den virkelig liten, får du gjøre det i assembly Lenke til kommentar
Harkonnen Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 (endret) #include <stdio.h> int main(){ printf("Hello World"); return 0; } Blir under 8K ferdig kompilert. (Blir 4K strippa) Men det er vel ikke akkurat C++. Hvorfor skal du ha den så liten egentlig ? Endret 5. mars 2007 av Harkonnen Lenke til kommentar
Peter Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 #include <iostream> int main() { std::cout << "Hello world" << std::endl; return 0; } Neverland:~/Compile peterhaza$ g++ untitled.cc -o test Neverland:~/Compile peterhaza$ ls -lh total 2 -rwxr-xr-x 1 peterhaz peterhaz 18K Mar 5 16:07 test -rw-r--r-- 1 peterhaz peterhaz 88B Mar 5 16:01 untitled.cc Macbook med OS x 10.4.8 Tiger og gcc version 4.0.1 (Apple Computer, Inc. build 5367) Lenke til kommentar
Paull Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 Er det under Windows eller *NIX den kompileres? Testa selv, og fikk en binary på 8,5k på Linux med GCC 4.0.3. Er debugging (-g) skrudd på i kompileringen? Lenke til kommentar
Ric_H Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 For siDDIs' eksempel får jeg... Win 464K med MinGW 3.4.2 106,5K med MS C++ (cl.exe) Linux 8,5K med gcc 4.1.2 (prøvde også med noen "optimize for size"-options i windows) Lenke til kommentar
kimla Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 Hva mener dere med 464K egentlig?? Er det byte dere mener? Lenke til kommentar
Emancipate Skrevet 5. mars 2007 Del Skrevet 5. mars 2007 Hva mener dere med 464K egentlig?? Er det byte dere mener? 8085973[/snapback] 475 136 byte Lenke til kommentar
ThorB Skrevet 15. april 2007 Del Skrevet 15. april 2007 fikk ikke til å kompilere dette under gcc. men c++ kompilerte den fint. c++ hello2.cpp blir hele 408KB under windows dette. 464KB hvis jeg bruker dev-c++ til å kompilere samme greia... snedig at de skal bli så store i størrelse Lenke til kommentar
Gjakmarrja Skrevet 15. april 2007 Del Skrevet 15. april 2007 (endret) section .data hello: db 'Hello world!',10 ; 'Hello world!' plus a linefeed character helloLen: equ $-hello ; Length of the 'Hello world!' string ; (I'll explain soon) section .text global _start _start: mov eax,4 ; The system call for write (sys_write) mov ebx,1 ; File descriptor 1 - standard output mov ecx,hello ; Put the offset of hello in ecx mov edx,helloLen ; helloLen is a constant, so we don't need to say ; mov edx,[helloLen] to get it's actual value int 80h ; Call the kernel mov eax,1 ; The system call for exit (sys_exit) mov ebx,0 ; Exit with return code of 0 (no error) int 80h @linux: 400bytes Endret 15. april 2007 av chills Lenke til kommentar
ThorB Skrevet 15. april 2007 Del Skrevet 15. april 2007 @chills bare for ren nysgjerrighet, hvordan kompilerer man eksemplet ditt? fungerte ikke under mingw eller cygwin-g++. må man gjøre noe spesielt for å kompilere den under windows? Lenke til kommentar
Gjakmarrja Skrevet 15. april 2007 Del Skrevet 15. april 2007 Lagde først en "elf" object fil med nasm-compileren, så brukte jeg linkeren "ld" til å lage en .bin. nasm -f elf hello.asmld -s -o hello hello.o Lenke til kommentar
ThorB Skrevet 15. april 2007 Del Skrevet 15. april 2007 (endret) okei. da blir vist denne koden linux spesific? men det funka å kompiler ja. men mottok en feilmelding(warning) under windows. testa det på linux. der funka alt. men fila ble 521 bytes. men artig å leke seg litt Endret 15. april 2007 av thor918 Lenke til kommentar
Dead_Rabbit Skrevet 15. april 2007 Del Skrevet 15. april 2007 Dette er veldig OS spesifikt, ja. Når du må ned på systemkall-stadiet (slik som her), er det vel lite som er portabelt. Lenke til kommentar
Firesky Skrevet 16. april 2007 Del Skrevet 16. april 2007 (endret) Hvis det er om å gjøre å få den så liten som mulig så er assembly tingen org 100h mov ah, 9 mov dx, tekst int 21h mov ah, 4Ch int 21h tekst db 'Hello World$',10,0 HELLO.zip den kom på 28 bytes, den ble faktisk større etter jeg zippa den Endret 16. april 2007 av Firesky Lenke til kommentar
pjott Skrevet 17. april 2007 Del Skrevet 17. april 2007 (endret) Min blir mye mer enn det, å jeg bruker DevCpp... #include <iostream> #include <conio.h> using namespace std; int main() { cout << "Hello World!"; getch_() } -------------------------------- Aner forsåvidt ikke hvorfor alt dette er nødvendig, iom. jeg er bare på 'Hello World' stadiet selv Endret 17. april 2007 av pjott Lenke til kommentar
Tannkrem1 Skrevet 30. april 2007 Del Skrevet 30. april 2007 bits 16org 256 mov ah, 9 mov dx, strengen int 33 mov ah, 76 int 33 strengen: db "Hello World", 13, 10, '$' 25 bytes. Kompilerte med nasm 0.98.39. Lenke til kommentar
GeirGrusom Skrevet 30. april 2007 Del Skrevet 30. april 2007 Det at man får en mindre programfil med en annen compiler, betyr ikke nødvendigvis at du sitter på det beste OS-et med den beste compileren. Det er bestemt av linkeren, og standard biblioteket. Lenke til kommentar
_vamecum Skrevet 7. mai 2007 Del Skrevet 7. mai 2007 (endret) har du en exe på 400kb så linker du sikkert statisk mot ting, samt at du muligens har noe debug-symboler i exe'n. Men størrelse har ingenting å si, om man ikke skal lage intro eller noe. Endret 7. mai 2007 av _vamecum Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå