Вопрос о макросе-обёртке - PullRequest
0 голосов
/ 05 августа 2010

Я читал функцию realloc в jemalloc и заметил, что все нестатические функции (по крайней мере те, которые я видел) в jemalloc обернуты макросом JEMALLOC_P, а JEMALLOC_P:

#define JEMALLOC_P(s) s

Зачем им такая вещь?

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Из сценария jemalloc configure:

AC_DEFINE_UNQUOTED([JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)], [${JEMALLOC_PREFIX}##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix])

Я предполагаю, что он предназначен для предоставления префикса для всех функций jemalloc.

Вы также увидитетакие вещи в jemalloc.h:

void *JEMALLOC_P(malloc)(size_t size)

Итак, по умолчанию jemalloc берет имя malloc(), но если вам все еще нужно использовать обычный malloc(), тогда вы можете

#define JEMALLOC_P(s) je_##s

и получите je_malloc() и обычный malloc() одновременно.

1 голос
/ 05 августа 2010

Вы должны взглянуть на контекст, в котором находится строка. Код на самом деле:

#ifndef JEMALLOC_P
#  define JEMALLOC_P(s) s
#endif

Это означает, что до включения файла заголовка вы могли предоставить свою версию JEMALLOC_P(),Если у вас его нет, это значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...