From: Zoran V. <zv...@ar...> - 2006-02-03 08:11:46
|
Am 02.02.2006 um 21:21 schrieb Gustaf Neumann: > how comes, that ckalloc is so much faster? It avoids the malloc's lock and builds its own malloc tables per-thread. So when lots of threads start to attack the malloc, there is quite a lot of contention on the mutex, so they go sleep for a while. > how do malloc/ckmalloc relate to ns_malloc? malloc is the bottom layer as provides with the OS (or the malloc library). ckalloc is a macro defined in Tcl so you can declare TCL_MEM_DEBUG and it will add some additional layer so the Tcl memory debugging tools can be used. If no TCL_MEM_DEBUG is declared, it defaults to Tcl_Alloc. The Tcl_Alloc is different for non-thread and thread-builds. This is controlled by USE_THREAD_ALLOC when compiling the Tcl library and is default for threaded builds. This activates special MT-optimized allocator. It handles all memory allocations <16284 bytes in per-thread tables, instead of shared tables thus avioding lock contention. This is what AS used before and it got into Tcl as it was/is pretty efficient overall. This is not always the case for 1cpu boxes, as I've seen in my tests. ns_malloc is just a wrapper arround the ckalloc. Cheers Zoran |