Produce static library that only overrides new and delete. This allows for a static library to be added that only overrides new and delete.
This commit is contained in:
Matthew Parkinson 2024-06-06 10:23:12 +01:00 коммит произвёл GitHub
Родитель 846a926155
Коммит 2dba088d24
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
2 изменённых файлов: 10 добавлений и 10 удалений

Просмотреть файл

@ -447,9 +447,11 @@ if(NOT SNMALLOC_HEADER_ONLY_LIBRARY)
endfunction()
set(SHIM_FILES src/snmalloc/override/new.cc)
set(SHIM_FILES src/snmalloc/override/malloc.cc src/snmalloc/override/new.cc)
set(SHIM_FILES_MEMCPY src/snmalloc/override/memcpy.cc)
add_shim(snmalloc-new-override STATIC src/snmalloc/override/new.cc)
if (SNMALLOC_STATIC_LIBRARY)
add_shim(snmallocshim-static STATIC ${SHIM_FILES})
target_compile_definitions(snmallocshim-static PRIVATE

Просмотреть файл

@ -1,4 +1,4 @@
#include "malloc.cc"
#include "libc.h"
#ifdef _WIN32
# ifdef __clang__
@ -16,8 +16,6 @@
# endif
#endif
using namespace snmalloc;
void* operator new(size_t size)
{
return snmalloc::libc::malloc(size);
@ -70,25 +68,25 @@ void operator delete[](void* p, std::nothrow_t&)
void* operator new(size_t size, std::align_val_t val)
{
size = aligned_size(size_t(val), size);
size = snmalloc::aligned_size(size_t(val), size);
return snmalloc::libc::malloc(size);
}
void* operator new[](size_t size, std::align_val_t val)
{
size = aligned_size(size_t(val), size);
size = snmalloc::aligned_size(size_t(val), size);
return snmalloc::libc::malloc(size);
}
void* operator new(size_t size, std::align_val_t val, std::nothrow_t&)
{
size = aligned_size(size_t(val), size);
size = snmalloc::aligned_size(size_t(val), size);
return snmalloc::libc::malloc(size);
}
void* operator new[](size_t size, std::align_val_t val, std::nothrow_t&)
{
size = aligned_size(size_t(val), size);
size = snmalloc::aligned_size(size_t(val), size);
return snmalloc::libc::malloc(size);
}
@ -104,12 +102,12 @@ void operator delete[](void* p, std::align_val_t) EXCEPTSPEC
void operator delete(void* p, size_t size, std::align_val_t val) EXCEPTSPEC
{
size = aligned_size(size_t(val), size);
size = snmalloc::aligned_size(size_t(val), size);
snmalloc::libc::free_sized(p, size);
}
void operator delete[](void* p, size_t size, std::align_val_t val) EXCEPTSPEC
{
size = aligned_size(size_t(val), size);
size = snmalloc::aligned_size(size_t(val), size);
snmalloc::libc::free_sized(p, size);
}