Mercurial > cpython-lru_cache-weakref
diff Python/pyarena.c @ 37690:751f7c79b5fd legacy-trunk
Force 8-alignment of memory blocks, as needed on
64-bit machines that require pointers to be aligned (e.g. IA64)
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Thu, 13 Apr 2006 19:16:13 +0000 |
| parents | f448d0075691 |
| children | ac79e9037e06 |
line wrap: on
line diff
--- a/Python/pyarena.c Thu Apr 13 13:08:58 2006 +0000 +++ b/Python/pyarena.c Thu Apr 13 19:16:13 2006 +0000 @@ -12,6 +12,11 @@ */ #define DEFAULT_BLOCK_SIZE 8192 +#define ALIGNMENT 8 +#define ALIGNMENT_SHIFT 3 +#define ALIGNMENT_MASK (ALIGNMENT - 1) +#define ROUNDUP(x) (((x) + ALIGNMENT_MASK) & ~ALIGNMENT_MASK) + typedef struct _block { /* Total number of bytes owned by this block available to pass out. * Read-only after initialization. The first such byte starts at @@ -82,7 +87,8 @@ b->ab_size = size; b->ab_mem = (void *)(b + 1); b->ab_next = NULL; - b->ab_offset = 0; + b->ab_offset = ROUNDUP((Py_uintptr_t)(b->ab_mem)) - + (Py_uintptr_t)(b->ab_mem); return b; } @@ -100,6 +106,7 @@ { void *p; assert(b); + size = ROUNDUP(size); if (b->ab_offset + size > b->ab_size) { /* If we need to allocate more memory than will fit in the default block, allocate a one-off block that is
