123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #include "lf_allocX64.h"
- //__arm__ id defined in clang for 32-bit ARM architectures only
- #if defined(__arm__) && !defined(__aarch64__)
- #error This allocator does not support 32-bit architectures. Please use another allocator instead!
- #endif
- //////////////////////////////////////////////////////////////////////////
- // hooks
- #if defined(USE_INTELCC) || defined(_darwin_) || defined(_freebsd_) || defined(_STLPORT_VERSION)
- #define OP_THROWNOTHING noexcept
- #else
- #define OP_THROWNOTHING
- #endif
- #ifndef _darwin_
- #if !defined(YMAKE)
- void* operator new(size_t size) {
- return LFAlloc(size);
- }
- void* operator new(size_t size, const std::nothrow_t&) OP_THROWNOTHING {
- return LFAlloc(size);
- }
- void operator delete(void* p)OP_THROWNOTHING {
- LFFree(p);
- }
- void operator delete(void* p, const std::nothrow_t&)OP_THROWNOTHING {
- LFFree(p);
- }
- void* operator new[](size_t size) {
- return LFAlloc(size);
- }
- void* operator new[](size_t size, const std::nothrow_t&) OP_THROWNOTHING {
- return LFAlloc(size);
- }
- void operator delete[](void* p) OP_THROWNOTHING {
- LFFree(p);
- }
- void operator delete[](void* p, const std::nothrow_t&) OP_THROWNOTHING {
- LFFree(p);
- }
- #endif
- //#ifndef _MSC_VER
- extern "C" void* malloc(size_t size) {
- return LFAlloc(size);
- }
- extern "C" void* valloc(size_t size) {
- return LFVAlloc(size);
- }
- extern "C" int posix_memalign(void** memptr, size_t alignment, size_t size) {
- return LFPosixMemalign(memptr, alignment, size);
- }
- extern "C" void* memalign(size_t alignment, size_t size) {
- void* ptr;
- int res = LFPosixMemalign(&ptr, alignment, size);
- return res ? nullptr : ptr;
- }
- extern "C" void* aligned_alloc(size_t alignment, size_t size) {
- return memalign(alignment, size);
- }
- #if !defined(_MSC_VER) && !defined(_freebsd_)
- // Workaround for pthread_create bug in linux.
- extern "C" void* __libc_memalign(size_t alignment, size_t size) {
- return memalign(alignment, size);
- }
- #endif
- extern "C" void free(void* ptr) {
- LFFree(ptr);
- }
- extern "C" void* calloc(size_t n, size_t elem_size) {
- // Overflow check
- const size_t size = n * elem_size;
- if (elem_size != 0 && size / elem_size != n)
- return nullptr;
- void* result = LFAlloc(size);
- if (result != nullptr) {
- memset(result, 0, size);
- }
- return result;
- }
- extern "C" void cfree(void* ptr) {
- LFFree(ptr);
- }
- extern "C" void* realloc(void* old_ptr, size_t new_size) {
- if (old_ptr == nullptr) {
- void* result = LFAlloc(new_size);
- return result;
- }
- if (new_size == 0) {
- LFFree(old_ptr);
- return nullptr;
- }
- void* new_ptr = LFAlloc(new_size);
- if (new_ptr == nullptr) {
- return nullptr;
- }
- size_t old_size = LFGetSize(old_ptr);
- memcpy(new_ptr, old_ptr, ((old_size < new_size) ? old_size : new_size));
- LFFree(old_ptr);
- return new_ptr;
- }
- extern "C" size_t malloc_usable_size(void* ptr) {
- if (ptr == nullptr) {
- return 0;
- }
- return LFGetSize(ptr);
- }
- NMalloc::TMallocInfo NMalloc::MallocInfo() {
- NMalloc::TMallocInfo r;
- #if defined(LFALLOC_DBG)
- r.Name = "lfalloc_dbg";
- #elif defined(LFALLOC_YT)
- r.Name = "lfalloc_yt";
- #else
- r.Name = "lfalloc";
- #endif
- r.SetParam = &LFAlloc_SetParam;
- r.GetParam = &LFAlloc_GetParam;
- return r;
- }
- #else
- NMalloc::TMallocInfo NMalloc::MallocInfo() {
- NMalloc::TMallocInfo r;
- r.Name = "system-darwin";
- return r;
- }
- #endif
|