Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <new>
- #include <memory>
- static const auto max_align_s = sizeof(std::max_align_t);
- void* operator new(size_t size) {
- void* p = std::malloc(size + max_align_s);
- if (p == nullptr) {
- throw std::bad_alloc{};
- }
- char* begin = static_cast<char*>(p) + max_align_s;
- char* end = begin + size;
- std::uninitialized_fill(begin, end, 0x00);
- new (p) int64_t{ size };
- return begin;
- }
- void operator delete(void* p) {
- if (p == nullptr) {
- return;
- }
- char* c = static_cast<char*>(p) - max_align_s;
- const uint64_t size = *reinterpret_cast<uint64_t*>(c);
- char* begin = static_cast<char*>(p);
- char* end = begin + size;
- std::uninitialized_fill(begin, end, 0xff);
- std::free(c);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement