Skip to content

Current bucket pre-allocation implementation is over-allocating #75

@alexpasmantier

Description

@alexpasmantier

From my understanding, this code's intent is to eagerly allocate the next bucket if we're about to write the first entry of the last 1/8th of the current bucket.

                       7/8             1/8  
         <---------------------------><---->
...--]  [========== current bucket =========]  [-------------------------- next bucket...
                                      ↑
                          first entry of the last 1/8th
                          of the current bucket

The code currently checks if:

if index == (location.bucket_len - (location.bucket_len >> 3)) {...}
//                                  -------------------------
//                                 i.e. 1/8 * location.bucket_len

Where index is - if I'm not mistaken a global vector index and should really be location.entry instead which corresponds to the relative location inside the current bucket:

if location.entry == (location.bucket_len - (location.bucket_len >> 3)) {...}

NOTE: in practice, this would mean the current code was over-allocating, by allocating ahead of time for potentially unneeded buckets.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions