Gå til innhold

Min hello world blir heile 41kb!


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet
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 :)

Skrevet (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 av Harkonnen
Skrevet

#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)

Skrevet

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?

Skrevet

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)

  • 1 måned senere...
Skrevet

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

Skrevet (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 av chills
Skrevet

@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?

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

Endret av thor918
Skrevet (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 :p

Endret av Firesky
Skrevet (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 :p

Endret av pjott
  • 2 uker senere...
Skrevet
bits 16

org 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.

Skrevet

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.

Skrevet (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 av _vamecum

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...