On 1/12/2018 2:59 PM, cyg Simple wrote: > On 1/12/2018 9:33 AM, Corinna Vinschen wrote: >> On Jan 12 15:06, Christian Franke wrote: >>> Lee wrote: >>>> Why is the cygwin gcc calloc so much slower than the >>>> i686-w64-mingw32-gcc calloc? >>>> 1:12 vs 0:11 >>>> >>>> $cat calloc-test.c >>>> #include <stdio.h> >>>> #include <stdlib.h> >>>> #define ALLOCATION_SIZE (100 * 1024 * 1024) >>>> int main (int argc, char *argv[]) { >>>> for (int i = 0; i < 10000; i++) { >>>> void *temp = calloc(ALLOCATION_SIZE, 1); >>>> if ( temp == NULL ) { >>>> printf("drat! calloc returned NULL\n"); >>>> return 1; >>>> } >>>> free(temp); >>>> } >>>> return 0; >>>> } >>>> >>> >>> Could reproduce the difference on an older i7-2600K machine: >>> >>> Cygwin: ~20s >>> MinGW: ~4s >>> >>> Timing [cm]alloc() calls without actually using the allocated memory might >>> produce misleading results due to lazy page allocation and/or zero-filling. >>> >>> MinGW binaries use calloc() from msvcrt.dll. This calloc() does not call >>> malloc() and then memset(). It directly calls: >>> >>> mem = HeapAlloc(_crtheap, HEAP_ZERO_MEMORY, size); >>> >>> which possibly only reserves allocate-and-zero-fill-on-demand pages for >>> later. >>> >>> Cygwin's calloc() is different. >> >> But then again, Cygwin's malloc *is* slow, particulary in >> memory-demanding multi-threaded scenarios since that serializes all >> malloc/free calls. >> >> The memory handling within Cygwin is tricky. Attempts to replace good >> old dlmalloc with a fresher jemalloc or ptmalloc failed, but that only >> means the developer (i.e., me, in case of ptmalloc) was too lazy... >> busy! I mean busy... to pull this through. >> >> Having said that, if somebody would like to take a stab at replacing >> dlmalloc with something leaner, I would be very happy and assist as >> much as I can. > > Corina, how reliable is the Cygwin time function on a non-Cygwin > executable? Isn't this a comparison of apples to oranges? >
s/Corina/Corinna Sorry, -- cyg Simple -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple