Search code examples
cmemorymemory-managementallocationpool

Memory pools implementation in C


I am looking for a good memory pool implementation in C.

it should include the following:

  1. Anti fragmentation.
  2. Be super fast :)
  3. Ability to "bundle" several allocations from different sizes under some identifier and delete all the allocations with the given identifier.
  4. Thread safe

Solution

  • I think the excellent talloc, developed as part of samba might be what you're looking for. The part I find most interesting is that any pointer returned from talloc is a valid memory context. Their example is:

    struct foo *X = talloc(mem_ctx, struct foo);
    X->name = talloc_strdup(X, "foo");
    // ...
    talloc_free(X); // frees memory for both X and X->name
    

    In response to your particular points:

    (1) Not sure what anti-fragmentation is in this case. In C you're not going to get compacting garbage collection anyway, so I think your choices are somewhat limited.

    (2) It advertises being only 4% slower than plain malloc(3), which is quite fast.

    (3) See example above.

    (4) It is thread safe as long as different threads use different contexts & the underlying malloc is thread safe.