in reply to Re^8: 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?

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:

c:\tmp\ActivePerl-5.10.1.1006-MSWin32-x86-291086\perl\bin>perl -V Summary of my perl5 (revision 5 version 10 subversion 1) configuration +: Platform: osname=MSWin32, osvers=5.00, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=und +ef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D +_CONSOLE -DNO_STRICT -DHAVE_DES_F optimize='-MD -Zi -DNDEBUG -O1', cppflags='-DWIN32' ccversion='12.00.8804', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64 +', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -l +ibpath:"C:\TEMP\perl---------plea libpth=\lib libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib + comdlg32.lib advapi32.lib shell perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool +.lib comdlg32.lib advapi32.lib s libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl510.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt: +ref,icf -libpath:"C:\TEMP\perl-- Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS PERL_MALLOC_WRAP PL_OP_SLAB_ALLOC USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_SITECUSTOMIZE Locally applied patches: ActivePerl Build 1006 [291086] 32728 64-bit fix for Time::Local Built under MSWin32 Compiled at Aug 24 2009 13:48:26 @INC: c:/tmp/ActivePerl-5.10.1.1006-MSWin32-x86-291086/perl/site/lib c:/tmp/ActivePerl-5.10.1.1006-MSWin32-x86-291086/perl/lib .

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.
RIP PCW It is as I've been saying!(Audio until 20090817)

Replies are listed 'Best First'.
Re^10: Why is Windows 100 times slower than Linux when growing a large scalar?
by ikegami (Patriarch) on Dec 02, 2009 at 16:41 UTC

    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.