3 ms·
Instead of pointers, you would store an index in the array of nodes: struct node { void * data; uint32_t idx_next; }; You are still dereferencin
by betterunix 13y ago
Instead of pointers, you would store an index in the array of nodes:
struct node {
void * data;
uint32_t idx_next;
};
You are still dereferencing pointers, of course, but you have better locality, even after doing a lot of insertions and deletions.
- marshray 13y agoIt's even better with intrusive containers. As an extreme case, let's say we need a collection of 24 bit RGB triplets: struct node { uint8_t r, g, b; uint8_t idx_next; }; Of course, a contiguous array uint8_t[256][3] might still be faster.
- yyqux 13y agoThis is a great optimization technique to have up your sleeve. The downside of course is that if you're dynamically allocating and freeing nodes you can end up having to write your own memory allocator.