такую штуку https://github.com/greg7mdp/dlmalloc
Проблема в следующем куске:
#if defined __cplusplus && (__GNUC__ >= 3 || __GNUC_MINOR__ >= 8) && !defined(__CYGWIN__)
#define DLTHROW throw ()
#else
#define DLTHROW
#endif
и dlfree определена как
DLMALLOC_EXPORT void dlfree(void*) DLTHROW;
Однако внутри стандартной шланговской библиотеки определена функция
///Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/malloc/_malloc.h:42
void free(void *);
В результате мы получаем ошибку:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/malloc/_malloc.h:42:7: error: 'free' is missing exception specification 'throw()'
void free(void *);
Вопрос: как можно объехать эту проблему? Какой фикс в dlmalloc можно вкорячить?
Версия шланга clang-1001.0.46.4
Эта реализация устарела на пару десятилетий. Для изучения того как работают аллокаторы подойдет, но в прод я бы не стал ее ставить. Более того, в ней есть баг, который мне было лень зарепортить.
Какой порекомендуете альтернативный? (Этот ещё хорош тем, что распространяется в виде одного единственного файла 😊)
кроссплатформенный? эффективный?
Не кроссплатформенный Тогда mimalloc
Кажется самые известные это tcmalloc и jemalloc. Есть еще новый mimaloc. Но в проде я с ними не работал, поэтому пусть лучше другие расскажут.
Обсуждают сегодня