如何加速c代码?

时间:2016-01-30 02:53:37

标签: c

我想知道是否有办法加快我和朋友一起制作的这个简单的.c程序。有什么东西我可以改变来清理它吗?也许可以添加一个弹出窗口,说明已经处理了多少图像。谢谢!

#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define DDS_MAGIC "DDS "
int ipos[10240];
int iposind=0;
int tfilelen;
char* TransBuf=NULL;
int main(int argc, char** argv){
    int i,r;
    FILE* sFile=NULL;
    FILE* tFile=NULL;
    char ifn[256];
    char ofn[256];
    char qc;
    if (argc !=2){
        printf("usage: %s filename\n",argv[0]);
        return 0;
    }
    strcpy(ifn,argv[1]);
    sFile=fopen(argv[1],"rb");
    fseek(sFile,0,SEEK_END);
    tfilelen=ftell(sFile);
    fseek(sFile,0,SEEK_SET);
    TransBuf=(char*)malloc(tfilelen);
    for(i=0,r=0;r<tfilelen;){
    /* read the file in */
    i=fread(TransBuf+r,1,tfilelen-r,sFile);
    if(i>0)r+=i;
    }
    qc=DDS_MAGIC[0];
    for(i=0;i<tfilelen;i++){
        if(TransBuf[i]!=qc)continue;
        if(strncmp(DDS_MAGIC,TransBuf+i,4)==0){
            ipos[iposind]=i;
            iposind++;
        }
    }
    ipos[iposind]=tfilelen;
    for(i=0;i<iposind;i++){
        char* s;
        int l;
        int j;
        s=TransBuf+ipos[i];
        l=ipos[i+1]-ipos[i];
        if(l<4)continue; /* don't write out dds files with no data*/
        /* write each dds segment to it's own file */
        sprintf(ofn,"%s_%d.dds",ifn,i);
        tFile=fopen(ofn,"w+b");
        for(j=0,r=0;r<l;){
            j=fwrite(s+j,1,l-r,tFile);
            if(j>0)r+=j;
        }
        fclose(tFile);
         system("pause");
    }
    printf("extracted %d files\n",i);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

在编译代码时可以选择应用优化。

在命令行上,您可以执行:

x

其中,0, 1, 2, 3 or s-Wall

  • O0:表示没有优化。
  • O1:中等优化,编译时间略有下降。
  • O2:使用最慢的编译时间进行全面优化。
  • O3:与O2相同,并自动内联子程序。
  • Os:空间优化。

有关详情,请点击here

此外,请使用-Wextra和{{1}}编译器选项并将警告视为错误。例如,删除所有未使用的变量。