Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
February 14, 2003 best compiler settings for fastest code of tiny C program? | ||||
---|---|---|---|---|
| ||||
I know it's slightly <insert-what-you-think-after-you've-read-the-source>, but which commandline options to sc (and which type of app. (16-bit, 32-bit)?) yield the fastest executing code (on AthlonXP) (I assume there is not much free room for inefficient code, but anyway, for such a tiny program i just like to know) of the following C source: #include <dos.h> #include <stdio.h> int main(void) { FILE *f; char b[4]; struct date d; getdate(&d); b[3]=d.da_day%10+4); d.da_day/=10; b[2]=d.da_day%10+48; b[1]=d.da_mon%10+48; d.da_mon/=10; b[0]=d.da_mon%10+48; f=fopen("rt.html","a"); fseek(f,71,SEEK_SET); fwrite(b,sizeof(char),4,f); fseek(f,138,SEEK_SET); fwrite(b,sizeof(char),4,f); fclose(f); return 0; } |
February 14, 2003 Re: best compiler settings for fastest code of tiny C program? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars Hansen | Tiny
roland
Lars Hansen wrote:
> I know it's slightly <insert-what-you-think-after-you've-read-the-source>, but
> which commandline options to sc (and which type of app. (16-bit, 32-bit)?)
> yield the fastest executing code (on AthlonXP) (I assume there is not much
> free room for inefficient code, but anyway, for such a tiny program i just
> like to know) of the following C source:
>
>
> #include <dos.h>
> #include <stdio.h>
>
> int main(void)
> {
> FILE *f;
> char b[4];
> struct date d;
>
> getdate(&d);
>
> b[3]=d.da_day%10+4);
> d.da_day/=10;
> b[2]=d.da_day%10+48;
>
> b[1]=d.da_mon%10+48;
> d.da_mon/=10;
> b[0]=d.da_mon%10+48;
>
> f=fopen("rt.html","a");
> fseek(f,71,SEEK_SET);
> fwrite(b,sizeof(char),4,f);
> fseek(f,138,SEEK_SET);
> fwrite(b,sizeof(char),4,f);
> fclose(f);
>
> return 0;
> }
>
>
>
|
February 14, 2003 Re: best compiler settings for fastest code of tiny C program? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars Hansen | I suspect that the execution of your program will be dominated by the time it takes to write the file, and that any optimizations settings will have no measureable affect on the total time. But in general, for running under DOS, your best bet for speed would be small model (-ms) and use -o for optimization. For programs too large to run under the s model, use the 32 bit dos extender model (-mx). "Lars Hansen" <lars.o.hansen@gmx.de> wrote in message news:b2is58$16kk$1@digitaldaemon.com... > I know it's slightly <insert-what-you-think-after-you've-read-the-source>, but > which commandline options to sc (and which type of app. (16-bit, 32-bit)?) > yield the fastest executing code (on AthlonXP) (I assume there is not much > free room for inefficient code, but anyway, for such a tiny program i just > like to know) of the following C source: > > > #include <dos.h> > #include <stdio.h> > > int main(void) > { > FILE *f; > char b[4]; > struct date d; > > getdate(&d); > > b[3]=d.da_day%10+4); > d.da_day/=10; > b[2]=d.da_day%10+48; > > b[1]=d.da_mon%10+48; > d.da_mon/=10; > b[0]=d.da_mon%10+48; > > f=fopen("rt.html","a"); > fseek(f,71,SEEK_SET); > fwrite(b,sizeof(char),4,f); > fseek(f,138,SEEK_SET); > fwrite(b,sizeof(char),4,f); > fclose(f); > > return 0; > } > > |
February 15, 2003 wrong code generated by tiny program of below thread | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars Hansen | the following program compiled with sc "sourcefilename" produces a program which does the following:
appends b at end of file, places b at file offset 138
it should place b at file offset 71 and 138 (b is the char array)
(also compiling with -o or -mtd produces this wrong code)
Also two qs:
1. when compiled with -mt there's the optlink warning 23 "No Stack": so does
the compiler not generate pushes or will they result in code loss?
2. when compiling with -mtd x.n filenames are shortened to x.3 filenames
(x<8)resulting in the file rt.htm created by the program. Is there a
workaround?
dmc version 8.29n
Lars
> #include <dos.h>
> #include <stdio.h>
>
> int main(void)
> {
> FILE *f;
> char b[4];
> struct date d;
>
> getdate(&d);
>
> b[3]=d.da_day%10+48;
> d.da_day/=10;
> b[2]=d.da_day%10+48;
>
> b[1]=d.da_mon%10+48;
> d.da_mon/=10;
> b[0]=d.da_mon%10+48;
>
> f=fopen("rt.html","a");
> fseek(f,71,SEEK_SET);
> fwrite(b,sizeof(char),4,f);
> fseek(f,138,SEEK_SET);
> fwrite(b,sizeof(char),4,f);
> fclose(f);
>
> return 0;
> }
|
February 16, 2003 Re: wrong code generated by tiny program of below thread | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars Hansen | To write files in binary you need a "b" in the fopen call, as in fopen("rt.html","ab"). Next, COM programs don't have a stack segment in the executable, that's why the linker produces a warning. The program will still work correctly, if you follow the COM conventions for stack usage (i.e. use very little stack). Third, 16 bit programs cannot handle file names other than 8.3. "rt.html" is not a valid 16 bit filename. Try "rt.htm". "Lars Hansen" <lars.o.hansen@gmx.de> wrote in message news:b2mhq8$2vp9$1@digitaldaemon.com... > the following program compiled with sc "sourcefilename" produces a program which does the following: > > appends b at end of file, places b at file offset 138 > > it should place b at file offset 71 and 138 (b is the char array) > > (also compiling with -o or -mtd produces this wrong code) > > Also two qs: > 1. when compiled with -mt there's the optlink warning 23 "No Stack": so does > the compiler not generate pushes or will they result in code loss? > 2. when compiling with -mtd x.n filenames are shortened to x.3 filenames > (x<8)resulting in the file rt.htm created by the program. Is there a > workaround? > > > dmc version 8.29n > > > Lars > > > > #include <dos.h> > > #include <stdio.h> > > > > int main(void) > > { > > FILE *f; > > char b[4]; > > struct date d; > > > > getdate(&d); > > > > b[3]=d.da_day%10+48; > > d.da_day/=10; > > b[2]=d.da_day%10+48; > > > > b[1]=d.da_mon%10+48; > > d.da_mon/=10; > > b[0]=d.da_mon%10+48; > > > > f=fopen("rt.html","a"); > > fseek(f,71,SEEK_SET); > > fwrite(b,sizeof(char),4,f); > > fseek(f,138,SEEK_SET); > > fwrite(b,sizeof(char),4,f); > > fclose(f); > > > > return 0; > > } > > |
Copyright © 1999-2021 by the D Language Foundation