in reply to Re^7: Why is Windows 100 times slower than Linux when growing a large scalar?
in thread Why is Windows 100 times slower than Linux when growing a large scalar?

Compiled in debug might be a red-herring, but it can have an big effect on performance.
On Visual Studio there is a supplied configuration called Debug; configurations are a way of grouping different compilation options, although they can be used for other things. Using Debug, the symbol table will be attached to the code for debugging, as you would expect, but it has other effects: it disables all optimization and uses a different heap management system.
So far as I am aware the -g option on gcc does not have those side-effects (stepping through optimised code in a debugger can be weird).
  • Comment on Re^8: Why is Windows 100 times slower than Linux when growing a large scalar?

Replies are listed 'Best First'.
Re^9: Why is Windows 100 times slower than Linux when growing a large scalar?
by BrowserUk (Patriarch) on Dec 02, 2009 at 14:02 UTC
    ActiveState 5.10.1 has a Perl510.dll ... I noticed that the code is all compiled in Debug

    Okay. I'm more used to the phrase "compiled with debug", rather than "compiled in debug". A small difference, but enough to cause me to question what you meant.

    The other question I have is what evidence do you have for believing AS perl is compiled with debug?

    When I use -V on a freshly downloaded 32-bit AS perl 5.10.1 install, I get this output:

    The significant portion of which is cc='cl', ccflags =... -DNDEBUG -O1 -DWIN32?

    In the source code they just call the CRT malloc/calloc/realloc, they don't do any magic with Win32 Heap APIs.

    It is the CRT itself that uses the Heap apis...not Perl.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

      Additionally, it uses

      • /MD: link with MSVCRT.LIB (as opposed to /MDd, link with MSVCRTD.LIB debug lib)
      • /O1: minimize space (as opposed to the default /Od, disable optimizations)
      • /GF: enable read-only string pooling

      That doesn't smell like debug. It does include the symbol table (/Zi: enable debugging information), but that shouldn't affect performance.