Я нашел в сети старый пакет, который хотел бы использовать.Один из заголовочных файлов содержит следующие строки:
#include "gcc_version.h"
#if GCC_VERSION>=3002
#define malloc_alloc __single_client_alloc
#include <ext/algorithm>
#include <ext/memory>
#else
#define __gnu_cxx std
#endif
Мой GCC_VERSION равен 7003, а __single_client_alloc
, видимо, давно прошло.single_client_alloc
также существовал некоторое время, но я не могу понять, существует ли он или нет, в каком заголовке он живет.
Похоже, что это единственные места, где он фактически используетсяследующие страшно выглядящие функции:
void* operator new(size_t s) { return std::malloc_alloc::allocate(s); }
void operator delete(void* p) { std::malloc_alloc::deallocate(p,sizeof(classname)); }
//and in another class
void* operator new(size_t, size_t n) { return std::malloc_alloc::allocate(total_size(n)); }
void operator delete(void* p) { std::malloc_alloc::deallocate((otherclassname*)p,total_size(reinterpret_cast<otherclassname*>(p)->size));}
Безопасно ли просто комментировать их и вернуться к поведению по умолчанию new
и delete
?Или они делают что-то помимо того, что делают код более эффективным для памяти, и в этом случае мне нужно реальное исправление?
В основном, есть ли исправление для этого кода, чтобы он работал в последних версиях GCC?