I decided to test a blead perl compiled with Visual C 2003 against Visual C 2008 with perlbench-run. With ithreads and psuedofork (normal win32 config) on 32 bit windows. The 2 tests were run in a Perl folder, that was identical except for perl517.dll and HiRes.dll (the VC 2003 HiRes.dll crashed when run with a VC 2008 perl517.dll, I did not pursue the bug) which were copied from the VC 2008 build on another machine. So all XS dlls on the VC 2008 were compiled with VC 2003 except for Time::HiRes. explorer.exe was the only GUI process running during the test with a context switch delta above 2 in Process Explorer so CPU had almost no background load, I killed every thing else. I prune the Win32 services list to a minimum on my PCs. Tests were on a T7200 Core 2 Duo with CPUs locked to 2 GHZ (no power savings). perlbench-run is not portable and is not Windows compatible. I did a bare minimum of changes to it for it to run without fatally erroring on Windows. -G7 flag does not exist on 2008. I saw no replacement for it on 2008. Remember the 2003 and 2008 perl517s are linked against different CRTs/clibs. Security cookie aka stack frame overrun checking (-GS) is off by default in 2003, I turned it off in 2008 for apple to apple (not standard in Perl's win32 makefile). I also turned on -GL (inter procedure optimization) for 2003 and 2008 to give each the best chance to optimize (not standard in Perl's win32 makefile).

In trying to figure out why the code bloat, the most striking thing was, for sv->sv_flags, VC 2003 tests them with test char * [sv+13], 0x08, while VC 2008 does test I32 * [sv+12], 0x00000800 which takes much more machine code to fit that constant in. There are probably other things my eye didn't notice. Anyway, here the results.

So what is the lesson here? Older is better? newer is not better? Or useless mucking by MS over the years to the compiler that turns out to cancel itself out? Or am I testing the frequency of hardware interrupts and ethernet broadcast traffic? or "faster" and "aligned" is self defeating if it causes something to not be in the CPU cache because it is fatter? Or am I testing changes of MS's clibs from 2003 to 2008? or is perlbench-run a bogus inaccurate test that does not reflect real world conditions?

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other