Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.


It'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.


This 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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: