util: remove the dummy field in mempool
authorMarek Olšák <maraeo@gmail.com>
Mon, 19 Jul 2010 16:08:53 +0000 (18:08 +0200)
committerMarek Olšák <maraeo@gmail.com>
Mon, 19 Jul 2010 19:05:47 +0000 (21:05 +0200)
It should allocate less memory now.

src/gallium/auxiliary/util/u_mempool.c
src/gallium/auxiliary/util/u_mempool.h

index c4bb265..0ce4b6c 100644 (file)
@@ -30,8 +30,6 @@
 
 #define UTIL_MEMPOOL_MAGIC 0xcafe4321
 
-struct util_mempool_block_body { char dummy; };
-
 /* The block is either allocated memory or free space. */
 struct util_mempool_block {
    /* The header. */
@@ -40,9 +38,6 @@ struct util_mempool_block {
 
    intptr_t magic;
 
-   /* The block begins here. */
-   struct util_mempool_block_body body;
-
    /* Memory after the last member is dedicated to the block itself.
     * The allocated size is always larger than this structure. */
 };
@@ -52,7 +47,8 @@ util_mempool_get_block(struct util_mempool *pool,
                        struct util_mempool_page *page, unsigned index)
 {
    return (struct util_mempool_block*)
-         ((uint8_t*)&page->body + (pool->block_size * index));
+          ((uint8_t*)page + sizeof(struct util_mempool_page) +
+           (pool->block_size * index));
 }
 
 static void util_mempool_add_new_page(struct util_mempool *pool)
@@ -92,15 +88,14 @@ static void *util_mempool_malloc_st(struct util_mempool *pool)
    assert(block->magic == UTIL_MEMPOOL_MAGIC);
    pool->first_free = block->next_free;
 
-   return &block->body;
+   return (uint8_t*)block + sizeof(struct util_mempool_block);
 }
 
 static void util_mempool_free_st(struct util_mempool *pool, void *ptr)
 {
-   struct util_mempool_block dummy;
    struct util_mempool_block *block =
          (struct util_mempool_block*)
-         ((uint8_t*)ptr - ((uint8_t*)&dummy.body - (uint8_t*)&dummy));
+         ((uint8_t*)ptr - sizeof(struct util_mempool_block));
 
    assert(block->magic == UTIL_MEMPOOL_MAGIC);
    block->next_free = pool->first_free;
index c96f9b6..a5b5d6a 100644 (file)
@@ -43,16 +43,11 @@ enum util_mempool_threading {
    UTIL_MEMPOOL_MULTITHREADED = TRUE
 };
 
-struct util_mempool_page_body { char dummy; };
-
 /* The page is an array of blocks (allocations). */
 struct util_mempool_page {
    /* The header (linked-list pointers). */
    struct util_mempool_page *prev, *next;
 
-   /* The page begins here. */
-   struct util_mempool_page_body body;
-
    /* Memory after the last member is dedicated to the page itself.
     * The allocated size is always larger than this structure. */
 };