ファイルを反転する非常に小さな C プログラムがあります。Windows でコンパイルするとexe
、サイズが 28,672 バイトのファイルになります。
- ファイルサイズを縮小するための最良の方法は何ですか?
- 最も多くのスペースを占めるものを教えてくれるツールはありますか? (含まれるライブラリ)
- このような単純なプログラムでは、このサイズは正常ですか?
- ファイルサイズを縮小するには、どのコンパイラフラグを使用する必要が
/O1
ありますか (/Os
効果がないようです)?
ところで-でコンパイルするgcc
と約50Kbのファイルが得られ、でコンパイルするとcl
28Kbになります。
編集:ここにコードがあります
#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;
}
アップデート:
- でコンパイルすると
/MD
、16Kb のファイルが生成されます。 - (Tiny C Compiler)でコンパイルすると
tcc
、2Kb のファイルが生成されました。 - コンパイルすると
gcc -s -O2
、8Kb ファイルが生成されます。