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

Kernel: Implement aligned operator new and use it

The compiler will use these to allocate objects that have alignment
requirements greater than that of our normal `operator new` (4/8 byte
aligned).

This means we can now use smart pointers for over-aligned types.

Fixes a FIXME.
This commit is contained in:
Daniel Bertalan 2021-07-15 12:08:35 +02:00 committed by Andreas Kling
parent c176680443
commit dd4ed4d22d
4 changed files with 41 additions and 10 deletions

View file

@ -34,6 +34,8 @@ struct nothrow_t {
};
extern const nothrow_t nothrow;
enum class align_val_t : size_t {};
};
void kmalloc_init();
@ -59,10 +61,16 @@ inline void* operator new[](size_t, void* p) { return p; }
[[nodiscard]] void* operator new(size_t size);
[[nodiscard]] void* operator new(size_t size, const std::nothrow_t&) noexcept;
[[nodiscard]] void* operator new(size_t size, std::align_val_t);
[[nodiscard]] void* operator new(size_t size, std::align_val_t, const std::nothrow_t&) noexcept;
void operator delete(void* ptr) noexcept;
void operator delete(void* ptr, size_t) noexcept;
void operator delete(void* ptr, size_t, std::align_val_t) noexcept;
[[nodiscard]] void* operator new[](size_t size);
[[nodiscard]] void* operator new[](size_t size, const std::nothrow_t&) noexcept;
void operator delete[](void* ptrs) noexcept;
void operator delete[](void* ptr, size_t) noexcept;