Fix invalid rounding up to power of two in allocators

#833
This commit is contained in:
Wojtek Figat
2022-11-25 22:07:13 +01:00
parent e6251ea4b0
commit b1618a88be
3 changed files with 8 additions and 8 deletions

View File

@@ -502,14 +502,14 @@ public:
_deletedCount = _elementsCount = 0; _deletedCount = _elementsCount = 0;
if (capacity != 0 && (capacity & (capacity - 1)) != 0) if (capacity != 0 && (capacity & (capacity - 1)) != 0)
{ {
// Align capacity value to the next power of two (if it's not) // Align capacity value to the next power of two (http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2)
capacity++; capacity--;
capacity |= capacity >> 1; capacity |= capacity >> 1;
capacity |= capacity >> 2; capacity |= capacity >> 2;
capacity |= capacity >> 4; capacity |= capacity >> 4;
capacity |= capacity >> 8; capacity |= capacity >> 8;
capacity |= capacity >> 16; capacity |= capacity >> 16;
capacity = capacity + 1; capacity++;
} }
if (capacity) if (capacity)
{ {

View File

@@ -373,14 +373,14 @@ public:
_deletedCount = _elementsCount = 0; _deletedCount = _elementsCount = 0;
if (capacity != 0 && (capacity & (capacity - 1)) != 0) if (capacity != 0 && (capacity & (capacity - 1)) != 0)
{ {
// Align capacity value to the next power of two (if it's not) // Align capacity value to the next power of two (http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2)
capacity++; capacity--;
capacity |= capacity >> 1; capacity |= capacity >> 1;
capacity |= capacity >> 2; capacity |= capacity >> 2;
capacity |= capacity >> 4; capacity |= capacity >> 4;
capacity |= capacity >> 8; capacity |= capacity >> 8;
capacity |= capacity >> 16; capacity |= capacity >> 16;
capacity = capacity + 1; capacity++;
} }
if (capacity) if (capacity)
{ {

View File

@@ -111,8 +111,8 @@ public:
} }
else else
{ {
// Round up to the next power of 2 and multiply by 2 // Round up to the next power of 2 and multiply by 2 (http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2)
capacity++; capacity--;
capacity |= capacity >> 1; capacity |= capacity >> 1;
capacity |= capacity >> 2; capacity |= capacity >> 2;
capacity |= capacity >> 4; capacity |= capacity >> 4;