1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 04:17:35 +00:00

AK+Kernel: Avoid double memory clearing of HashTable buckets

Since the allocated memory is going to be zeroed immediately anyway,
let's avoid redundantly scrubbing it with MALLOC_SCRUB_BYTE just before
that.

The latest versions of gcc and Clang can automatically do this malloc +
memset -> calloc optimization, but I've seen a couple of places where it
failed to be done.

This commit also adds a naive kcalloc function to the kernel that
doesn't (yet) eliminate the redundancy like the userland does.
This commit is contained in:
Daniel Bertalan 2022-03-14 23:59:16 +01:00 committed by Andreas Kling
parent cd21e03225
commit e3eb68dd58
4 changed files with 15 additions and 2 deletions

View file

@ -461,12 +461,11 @@ private:
auto old_capacity = m_capacity;
Iterator old_iter = begin();
auto* new_buckets = kmalloc(size_in_bytes(new_capacity));
auto* new_buckets = kcalloc(1, size_in_bytes(new_capacity));
if (!new_buckets)
return Error::from_errno(ENOMEM);
m_buckets = (BucketType*)new_buckets;
__builtin_memset(m_buckets, 0, size_in_bytes(new_capacity));
m_capacity = new_capacity;
m_deleted_count = 0;