I am working on a concurrent data structure that uses a number of small sized temporary objects. A lot of these objects are the same size. So to reduce the strain on the memory allocator I have been using a thread local map to store the objects as <size, list>
tuples.
When a thread needs an object, it checks the map for a suitable object before going to the allocator. This works well and has improved performance significantly, however it is prone to the issue where overtime one thread loses its entire pool to other threads, forcing it to allocate new objects. If the application runs for a long period of time, I find a few threads having memory pools way to large.
To solve this I want to add a shared memory pool between the thread local pools and the allocator. Since the number of structs and the size of the structs are constant at compile time, I figure that there should be someway using macros to map each size to an array position. Allowing for a much lighter memory management.
Here is my current solution
#define RC_OBJECT_COUNT 0
#define ADD_RC_OBJECT(object) \
#ifndef RC_MAP_``sizeof(object)''
#define RC_OBJECT_TEMP RC_OBJECT_COUNT \
#undefine RC_OBJECT_COUNT \
#define RC_OBJECT_COUNT RC_OBJECT_TEMP+1 \
#define RC_MAP_``sizeof(object)'' RC_OBJECT_TEMP
#endif
Is there a way to echo the the result of the call to sizeof(object) into the defined variable name? Preferably without a separate configuration script.