[Python-Dev] pymalloc killer (original) (raw)
Marangozov, Vladimir (Vladimir) vmarangozov@optimay.com
Wed, 3 Apr 2002 16:50:19 +0200
- Previous message: [Python-Dev] A Hygienic Macro System in Python?
- Next message: [Python-Dev] pymalloc killer
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[Tim, in obmalloc.c]
_#define ADDRESSINRANGE(P, I) _ ((I) < narenas && (uptr)(P) - arenas[I] < (uptr)ARENASIZE)
Bravo! Very nice.
Now that the pool header is reduced in size by one slot, I can only suggest a small optimization to get rid off the multiplication when trying to extend the free list. Since you know the code by heart already, this should be self explanatory. It's only 3 lines of code:
add a member in the pool struct, after capacity:
uint lastoffset; /* free list tail block offset */
In malloc, in the "try to extend the free list" block:
size <<= ALIGNMENT_SHIFT; /* block size */ pool->lastoffset += size; pool->freeblock = (block *)pool + pool->lastoffset;
In the "init_pool" block:
pool->capacity = ... pool->lastoffset = POOL_OVERHEAD + size; UNLOCK();
In other words, the lastoffset acts as an upper bound watermark. I didn't want to do that optimization before, because it would have resulted in a bigger pool header and waste of space. Now it's ok.
Cheers, Vladimir
- Previous message: [Python-Dev] A Hygienic Macro System in Python?
- Next message: [Python-Dev] pymalloc killer
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]