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:
parent
c176680443
commit
dd4ed4d22d
4 changed files with 41 additions and 10 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue