Blast from the past here...
Enrico Migliore wrote:
> Hi,
>
> I did some tests in order to see which, among __fastcall, __stdcall,
> __cdecl, __inline,
> gives the fastest execution time: my_functions() was called 300000000
> times
>
> Processor = Intel Pentium 1.4 GHz
> OS = Windows 2000
> Compiler = Microsoft Visual C
> Executable type = release
>
> ---------------------- code ------------------------------
> #include <stdio.h>
> #include <time.h>
>
> /*
> * qualifier: __fastcall, __stdcall, __cdecl, __inline
> */
> qualifier int my_function (int a, char *buf)
> {
>
> int int_1 = 1987;
> char char_1 = 'a';
> long long_1 = 123456789L;
> long long_2 = &long_1;
>
> if (a > 0)
> {
> a++;
> }
> else
> {
> a--;
> }
> if (int_1 > 9)
> {
> char_1++;
> }
> else
> {
> char_1--;
> }
> *long_2++;
> if (buf == NULL)
> {
> return -1;
> }
> buf++;
> return a;
> }
>
>
> double test (void)
> {
>
> long i;
> int result;
> char buf[8];
> clock_t start;
> clock_t stop;
> double duration;
>
> buf[0] = 0;
>
> start = clock(); for (i = 0; i < 300000000; i++)
> {
> result = my_function(10,buf);
> }
> stop = clock();
> duration = (double) (stop - start) / CLOCKS_PER_SEC;
>
> return duration;
> }
>
>
> Results:
>
> --------------------------------------------------------
> qualifier | test duration (maximize for speed = OFF)
> --------------------------------------------------------
> __fastcall | 14.3900 seconds
> __stdcall | 12.9700 seconds
> __cdecl (**) | 13.6200 seconds
> __inline | 12.9600 seconds
>
> --------------------------------------------------------
> qualifier | test duration (maximize for speed = ON)
> --------------------------------------------------------
> __fastcall | 5.9400 seconds
> __stdcall | 6.5300 seconds
> __cdecl (**) | 6.4800 seconds
> __inline | 0.0000 seconds (*)
>
> (*) suspicious
Actually, this is not suspicious - if the function is inlined, the
compiler can optimise the loop away. This is a common flaw with
benchmark code - not as smart as the compiler is :-)
> (**) __cdecl is the default qualifier
>
>
>
> Conclusion:
>
> __inline and __fastcall give the best results
> when the compiler is instructed to generate code
> with the flag "optimize for speed" enabled.
>
> I also noticed that parameters marshalling is not an issue
> because the compiler will link the appropriate static library according
> to the optimization selected. Therefore, in win32, we should
> be able to optimize our C code for speed without problems.
>
> Enrico
>
>
--
http://www.apache-ssl.org/ben.html http://www.thebunker.net/
** ApacheCon - Dec 10-14th - San Diego - http://apachecon.com/ **
"There is no limit to what a man can do or how far he can go if he
doesn't mind who gets the credit." - Robert Woodruff