Browse Source Download (without any required ccan dependencies)
block_pool
An efficient allocator for blocks that don't need to be resized or freed.
Joey Adams <joeyadams3.14159@gmail.com>
block_pool allocates blocks by packing them into buffers, making the overhead per block virtually zero. Because of this, you cannot resize or free individual blocks, but you can free the entire block_pool.
The rationale behind block_pool is that talloc uses a lot of bytes per block (48 on 32-bit, 80 on 64-bit). Nevertheless, talloc is an excellent tool for C programmers of all ages. Because a block_pool is a talloc context, it can be useful in talloc-based applications where many small blocks need to be allocated.
#include <ccan/block_pool/block_pool.h>
int main(void) {
struct block_pool *bp = block_pool_new(NULL);
void *buffer = block_pool_alloc(bp, 4096);
char *string = block_pool_strdup(bp, "A string");
int array[] = {0,1,1,2,3,5,8,13,21,34};
int *array_copy = block_pool_memdup(bp, array, sizeof(array));
memset(buffer, 0xff, 4096);
printf("string = %s\n", string);
printf("array_copy[0] == %i\n", array_copy[0]);
block_pool_free(bp);
return 0;
}
MIT