memory: add all kinds of C++ new/delete operators

This commit is contained in:
Edgaru089 2021-10-23 18:36:31 +08:00
parent 78314c25fb
commit c504b5dc31
2 changed files with 43 additions and 11 deletions

View File

@ -57,4 +57,22 @@ bool operator!=(const kAllocator<T> &, const kAllocator<U> &) {
// operators new and delete only call kMalloc/kFree, so C++ code // operators new and delete only call kMalloc/kFree, so C++ code
// must stay after paging setup // must stay after paging setup
void *operator new(std::size_t size); void *operator new(std::size_t size);
void operator delete(void *ptr) noexcept; void *operator new[](std::size_t size);
#if __cplusplus >= 201703L
void *operator new(std::size_t size, std::align_val_t align);
void *operator new[](std::size_t size, std::align_val_t align);
#endif
void operator delete(void *ptr) noexcept;
void operator delete[](void *ptr) noexcept;
#if __cplusplus >= 201402L
void operator delete(void *ptr, std::size_t size) noexcept;
void operator delete[](void *ptr, std::size_t size) noexcept;
#endif
#if __cplusplus >= 201703L
void operator delete(void *ptr, std::align_val_t align) noexcept;
void operator delete[](void *ptr, std::align_val_t align) noexcept;
void operator delete(void *ptr, std::size_t size, std::align_val_t align) noexcept;
void operator delete[](void *ptr, std::size_t size, std::align_val_t align) noexcept;
#endif

View File

@ -1,13 +1,27 @@
#include "memory.h"
#include "memory.hpp" #include "memory.hpp"
void *operator new(std::size_t size) { #include "../extlib/dlmalloc/malloc-2.8.6.h"
void *data = kMalloc(size);
/*if (!data) {
throw helos::bad_alloc();
}*/
return data;
}
void operator delete(void *ptr) noexcept { void *operator new(std::size_t size) { return kMalloc(size); }
kFree(ptr); void *operator new[](std::size_t size) { return kMalloc(size); }
}
void operator delete(void *ptr) noexcept { kFree(ptr); }
void operator delete[](void *ptr) noexcept { kFree(ptr); }
#if __cplusplus >= 201703L
void *operator new(std::size_t size, std::align_val_t align) { return dlmemalign((size_t)align, size); }
void *operator new[](std::size_t size, std::align_val_t align) { return dlmemalign((size_t)align, size); }
#endif
#if __cplusplus >= 201402L
void operator delete(void *ptr, std::size_t size) noexcept { kFree(ptr); }
void operator delete[](void *ptr, std::size_t size) noexcept { kFree(ptr); }
#endif
#if __cplusplus >= 201703L
void operator delete(void *ptr, std::align_val_t align) noexcept { kFree(ptr); }
void operator delete[](void *ptr, std::align_val_t align) noexcept { kFree(ptr); }
void operator delete(void *ptr, std::size_t size, std::align_val_t align) noexcept { kFree(ptr); }
void operator delete[](void *ptr, std::size_t size, std::align_val_t align) noexcept { kFree(ptr); }
#endif