Attached the source of my benchmark program in case anyone wants to
have a look at it.

-- 
Francois Gouget         [EMAIL PROTECTED]        http://fgouget.free.fr/
     We are Pentium of Borg. You will be approximated. Division is futile.
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>

static char pattern[]="qwertyuiopoasdfhgjklzxcvnbmn";
static char filename[]="Filename.txt";
static char extension[]="rej";

char* mystrcpy(char* dst,char* src)
{
    char* d=dst;
    while (*src) *d++=*src++;
    *d='\0';
    return dst;
}
char* mystrcat(char* dst,char* src)
{
    char* d=dst;
    while (*d!='\0') d++;
    while (*src!='\0') *d++=*src++;
    *d='\0';
    return dst;
}

char* cpycat(char* dst,char* src)
{
    while (*src!='\0') *dst++=*src++;
    *dst='\0';
    return dst;
}

int main(int argc, char** argv)
{
    int len;
    char* path;
    char* buf;
    char* b;
    int i;
    struct timeval start,stop;
    int elapsed;

    if (argc!=2) {
        fprintf(stderr,"Usage: sprintf length\n");
        return 2;
    }

    len=atoi(argv[1]);
    if (len==-1) {
        fprintf(stderr,"bad length\n");
        return 1;
    }

    path=malloc(len+1);
    buf=malloc(len+1+100+1);
    for (i=0;i<len;i++)
    {
        path[i]=pattern[i % (sizeof(pattern)-1)];
    }
    path[len]='\0';
    printf("len=%d\n",strlen(path));

    /***** The 3 strings case *****/
    printf("3 strings case\n");

    /* Test sprintf */
    for (i=0;i<10;i++) { /* warm up */
        sprintf(buf,"%s/%s",path,filename);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        sprintf(buf,"%s/%s",path,filename);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("sprintf:  elapsed=%5d\n",elapsed);

    /* Test strcat */
    for (i=0;i<10;i++) { /* warm up */
        strcpy(buf,path);
        strcat(buf,"/");
        strcat(buf,filename);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        strcpy(buf,path);
        strcat(buf,"/");
        strcat(buf,filename);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("strcat:   elapsed=%5d\n",elapsed);

    /* Test mystrcat */
    for (i=0;i<10;i++) { /* warm up */
        mystrcpy(buf,path);
        mystrcat(buf,"/");
        mystrcat(buf,filename);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        mystrcpy(buf,path);
        mystrcat(buf,"/");
        mystrcat(buf,filename);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("mystrcat: elapsed=%5d\n",elapsed);

    /* Test cpycat */
    for (i=0;i<10;i++) { /* warm up */
        b=buf;
        b=cpycat(b,path);
        b=cpycat(b,"/");
        b=cpycat(b,filename);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        b=buf;
        b=cpycat(b,path);
        b=cpycat(b,"/");
        b=cpycat(b,filename);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("cpycat:   elapsed=%5d\n",elapsed);


    /***** The 5 strings case *****/
    printf("5 strings case\n");

    /* Test sprintf */
    for (i=0;i<10;i++) { /* warm up */
        sprintf(buf,"%s/%s.%s",path,filename,extension);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        sprintf(buf,"%s/%s.%s",path,filename,extension);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("sprintf:  elapsed=%5d\n",elapsed);

    /* Test strcat */
    for (i=0;i<10;i++) { /* warm up */
        strcpy(buf,path);
        strcat(buf,"/");
        strcat(buf,filename);
        strcat(buf,".");
        strcat(buf,extension);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        strcpy(buf,path);
        strcat(buf,"/");
        strcat(buf,filename);
        strcat(buf,".");
        strcat(buf,extension);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("strcat:   elapsed=%5d\n",elapsed);

    /* Test mystrcat */
    for (i=0;i<10;i++) { /* warm up */
        mystrcpy(buf,path);
        mystrcat(buf,"/");
        mystrcat(buf,filename);
        mystrcat(buf,".");
        mystrcat(buf,extension);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        mystrcpy(buf,path);
        mystrcat(buf,"/");
        mystrcat(buf,filename);
        mystrcat(buf,".");
        mystrcat(buf,extension);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("mystrcat: elapsed=%5d\n",elapsed);

    /* Test cpycat */
    for (i=0;i<10;i++) { /* warm up */
        b=buf;
        b=cpycat(b,path);
        b=cpycat(b,"/");
        b=cpycat(b,filename);
        b=cpycat(b,".");
        b=cpycat(b,extension);
    }
    gettimeofday(&start,NULL);
    for (i=0;i<50000;i++) {
        b=buf;
        b=cpycat(b,path);
        b=cpycat(b,"/");
        b=cpycat(b,filename);
        b=cpycat(b,".");
        b=cpycat(b,extension);
    }
    gettimeofday(&stop,NULL);
    elapsed=(stop.tv_sec-start.tv_sec)*1000000+(stop.tv_usec-start.tv_usec);
    printf("cpycat:   elapsed=%5d\n",elapsed);

    return 0;
}

Reply via email to