1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
- * Copyright (c) 2021, Daniel Bertalan <dani@danielbertalan.dev>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #if defined(__serenity__) && !defined(KERNEL)
- # include <AK/Assertions.h>
- # include <AK/kmalloc.h>
- // However deceptively simple these functions look, they must not be inlined.
- // Memory allocated in one translation unit has to be deallocatable in another
- // translation unit, so these functions must be the same everywhere.
- // By making these functions global, this invariant is enforced.
- void* operator new(size_t size)
- {
- void* ptr = malloc(size);
- VERIFY(ptr);
- return ptr;
- }
- void* operator new(size_t size, const std::nothrow_t&) noexcept
- {
- return malloc(size);
- }
- void operator delete(void* ptr) noexcept
- {
- return free(ptr);
- }
- void operator delete(void* ptr, size_t) noexcept
- {
- return free(ptr);
- }
- void* operator new[](size_t size)
- {
- void* ptr = malloc(size);
- VERIFY(ptr);
- return ptr;
- }
- void* operator new[](size_t size, const std::nothrow_t&) noexcept
- {
- return malloc(size);
- }
- void operator delete[](void* ptr) noexcept
- {
- return free(ptr);
- }
- void operator delete[](void* ptr, size_t) noexcept
- {
- return free(ptr);
- }
- #endif
|