Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Mingwllä käännettyjen pikkuohjelmien "suuri" koko

Sivun loppuun

L2-K2 [25.02.2007 18:57:47]

#

Kyhäsin tänään minimalistisen ROT-13 salaajan (lähdekoodin koko 95 tavua):

main() {char c; for(;;) { c=getchar(); if(c>64&&c<123){c +=(c<78|| c>96&&c<110)? 13:-13;}putchar( c);}}

Kun käännän sen Windowsissa komennolla "gcc rot.c -O2 -o rot.exe" tulee sen kooksi 'pöyristyttävät' 15,5 kilotavua. Komennolla "gcc -s rot.c -O2 -o rot.exe" koko on yhä 'aivan liian suuri' 5,5kt.

Miten saisin exen koon vieläkin alaspäin?

(Mod. edit. Koodisi on kieltämättä rumaa, mutta leiskaa sillä ei silti saa rikkoa. Eli välejä lisätty.)

kayttaja-4976 [25.02.2007 21:39:05]

#

Voisi ehkä riippua mitä sulla on includessa siinä?

tgunner [25.02.2007 22:02:10]

#

Mä käänsin ton sun ohjelmas komennolla gcc -s -o2 -o rot.exe rot.c ja mukana oli #include <stdio.h>. Koko oli 6,0kB.

L2-K2 [26.02.2007 17:00:34]

#

kayttaja-4976: includaan vain stdion
TGunner: 5,5kt tai 6,0kt on aika paljon tollasesta, etenkin kun suurin osa koosta on turhaa.

tgunner [26.02.2007 17:27:37]

#

No se on nyt vaan niin.

Metabolix [26.02.2007 21:50:50]

#

C:llä tekemällä ja Windows-ohjelmana tuskin saat sitä pienemmäksi. Assembly voisi mahdollistaa vielä pienemmän koon. COM-ohjelmana (reaalitilan DOS-ohjelmana, eikös se ole) voit yrittää, jos sellainen kelpaa ja sopii tarkoitukseen. Se pitäisi siis kaiketi tehdä Assemblylla.

Blaze [27.02.2007 03:12:38]

#

Oli vähän tylsää, väänsin assemblyllä vastaavan ohjelman (http://blaze.dyndns.ws/~blaze/rot13.asm jos joku tarvii).
Tuo (stripattu) asmitoteutus on tosiaan noin kuus kertaa pienempi, kuin -Os -s C-versio (joka on muuten sekin Linux-ELFfinä melkein puolet Windows-PE:tä pienempi :o), taitavampi koodaaja sais varmaan vieläkin pienempään tilaan.

-rwxr-xr-x 1 blaze users 3008 2007-02-27 03:03 ref
-rwxr-xr-x 1 blaze users  548 2007-02-27 03:08 rot13

Johtopäätös: C-kääntäjä tekee bloatteja binäärejä.

Pekka Karjalainen [27.02.2007 09:50:09]

#

Cygwinin gcc:llä 2560 tavua. Lcc-kääntäjällä noin 9 kt.

Joku näistä käyttää dll-tiedostoa tukenaan. Lukija saa itse arvata mikä.

Johtopäätös 2: Leluohjelmat kannattaa tehdä skriptikielillä.

L2-K2 [28.02.2007 16:59:17]

#

Kiitos vastauksista, hex-edittorillakin näkee WIN-binääreissä olevaa turhaa tilankäyttöä, valitettavasti sitä ei näköjään saa poistettua helpolla tavalla.

Blaze: tiedän että assemblyllä saa tehtyä pikkuohjelmat oikeasti pienikokoisiksi
Kopeekka: skriptikielet eivät ole yhtä kivoja kuin C


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta