]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/generic/array: round sizes to those used by jemalloc docs-array-growth-0xship/deployments/9387 array-growth
authorLukáš Ondráček <lukas.ondracek@nic.cz>
Mon, 22 Jun 2026 15:45:00 +0000 (17:45 +0200)
committerLukáš Ondráček <lukas.ondracek@nic.cz>
Mon, 22 Jun 2026 15:45:00 +0000 (17:45 +0200)
lib/generic/array.h

index 39caed2a48298e385baa6105e721e3ddefd0431d..dd684ae5ad1d88eb7ae02306b40dabe2c3adb5a8 100644 (file)
@@ -57,8 +57,9 @@
 static inline size_t array_next_count(size_t elm_size, size_t want, size_t have)
 {
        // round size to power of two
-       const size_t want_b = MAX(want, 4) * elm_size;
-       const size_t next_b =  1 << (8 * sizeof(unsigned int) - __builtin_clz(want_b - 1));
+       const size_t want_b = MAX(want * elm_size, 32);
+       const size_t msb_index = 8 * sizeof(unsigned int) - __builtin_clz(want_b - 1);
+       const size_t next_b = (((want_b - 1) >> (msb_index - 3)) + 1) << (msb_index - 3);
        return next_b / elm_size;
 }