pool: make sure PoolAllocator uses the correct alignment

This changes the PoolAllocator to default the alignment to the given type. This makes the code simpler, and most importantly
fixes a bug on ARM 32bit that caused OOM: The class CTxOut has a member CAmount which is an int64_t and on ARM 32bit int64_t
are 8 byte aligned which is larger than the pointer alignment of 4 bytes. So for CCoinsMap to be able to use the pool, we
need to use the alignment of the member instead of just alignof(void*).
This commit is contained in:
Martin Leitner-Ankerl
2023-11-19 15:57:03 +01:00
parent d752349029
commit ce881bf9fc
4 changed files with 4 additions and 7 deletions

View File

@@ -163,8 +163,7 @@ BOOST_AUTO_TEST_CASE(memusage_test)
std::hash<int>,
std::equal_to<int>,
PoolAllocator<std::pair<const int, int>,
sizeof(std::pair<const int, int>) + sizeof(void*) * 4,
alignof(void*)>>;
sizeof(std::pair<const int, int>) + sizeof(void*) * 4>>;
auto resource = Map::allocator_type::ResourceType(1024);
PoolResourceTester::CheckAllDataAccountedFor(resource);