J'ai un tout petit programme en C qui inverse un fichier. Il se compile sous Windows en un programme exe
d'une taille de 28 672 octets.
- Quelle est la meilleure approche pour réduire la taille du fichier ?
- Existe-t-il des outils qui peuvent me dire ce qui prend le plus de place ? (y compris les bibliothèques)
- Cette taille est-elle normale pour un programme aussi simple ?
- Quels drapeaux de compilateur dois-je utiliser pour réduire la taille du fichier (
/O1
y/Os
ne semble pas avoir d'effet) ?
BTW - quand il est compilé avec gcc
J'obtiens un fichier d'environ 50Kb et quand il est compilé avec cl
J'obtiens 28Kb.
EDIT : Voici le code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fi, *fo;
char *file1, file2[1024];
long i, length;
int ch;
file1 = argv[1];
file2[0] = 0;
strcat(file2, file1);
strcat(file2, ".out");
fo = fopen(file2,"wb");
if( fo == NULL )
{
perror(file2);
exit(EXIT_FAILURE);
}
fi = fopen(file1,"rb");
if( fi == NULL )
{
fclose(fo);
return 0;
}
fseek(fi, 0L, SEEK_END);
length = ftell(fi);
fseek(fi, 0L, SEEK_SET);
i = 0;
while( ( ch = fgetc(fi) ) != EOF ) {
fseek(fo, length - (++i), SEEK_SET);
fputc(ch,fo);
}
fclose(fi);
fclose(fo);
return 0;
}
UPDATE :
- Compilation avec
/MD
a produit un fichier de 16Kb. - Compilation avec
tcc
(Tiny C Compiler) a produit un fichier de 2Kb. - Compilation avec
gcc -s -O2
a produit un fichier de 8Kb.