astitcher commented on a change in pull request #525: DISPATCH-1372 alloc_pool intrusive linked list can be replaced by a linked stack URL: https://github.com/apache/qpid-dispatch/pull/525#discussion_r297288448
########## File path: src/alloc_pool.c ########## @@ -44,20 +46,97 @@ DEQ_DECLARE(qd_alloc_type_t, qd_alloc_type_list_t); #define PATTERN_BACK 0xbabecafe struct qd_alloc_item_t { - DEQ_LINKS(qd_alloc_item_t); uint32_t sequence; #ifdef QD_MEMORY_DEBUG qd_alloc_type_desc_t *desc; uint32_t header; #endif }; -DEQ_DECLARE(qd_alloc_item_t, qd_alloc_item_list_t); +#define CHUNK_SIZE 128/sizeof(void*) +struct qd_alloc_chunk_t { + qd_alloc_chunk_t *prev; + qd_alloc_item_t *items[CHUNK_SIZE]; + qd_alloc_chunk_t *next; +}; + +struct qd_alloc_linked_stack_t { + //the base + qd_alloc_chunk_t *top_chunk; + uint32_t top; //qd_alloc_item* top_item = top_chunk->items[top+1] <-> top > 0 Review comment: Hmm, difficult to say - in any event it's going to be close to some entries in the list and far from others. Perhaps eliminating it completely might be possible. Another thing to think about is not to use pointers at all, but rather use a base (64 bit address) and smaller offset (32 bit entry count) - that should allow more entries into the same number of cache lines - you would have to allocate larger and contiguous blocks though. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org