www.digitalmars.com         C & C++   DMDScript  

c++.dos.16-bits - best compiler settings for fastest code of tiny C program?

reply "Lars Hansen" <lars.o.hansen gmx.de> writes:
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;
 }
Feb 14 2003
next sibling parent roland <--rv ronetech.com> writes:
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;
  }
 
 
 

Feb 14 2003
prev sibling next sibling parent "Walter" <walter digitalmars.com> writes:
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>,

 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;
  }

Feb 14 2003
prev sibling parent reply "Lars Hansen" <lars.o.hansen gmx.de> writes:
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;
  }

Feb 15 2003
parent "Walter" <walter digitalmars.com> writes:
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

 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;
  }


Feb 16 2003