Gå til innhold

Min hello world blir heile 41kb!


Anbefalte innlegg

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
Videoannonse
Annonse
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

#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 av Harkonnen
Lenke til kommentar

#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
  • 1 måned senere...

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
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 av chills
Lenke til kommentar

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 :D

Endret av thor918
Lenke til kommentar

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 :p

Endret av pjott
Lenke til kommentar
  • 2 uker senere...

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 av _vamecum
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...