我试图了解mallopt()
在glibc中的工作方式,但是无法理解函数LIBC_PROBE
中使用的mallopt()
宏的用法。 LIBC_PROBE
的定义正在创建另一个宏LIBC_PROBE_1
,并再次创建另一个STAP_PROBE##n
。如果为mallopt()
,则为STAP_PROBE3(a1, a2, a3)
。之后,没有任何线索STAP_PROBE3
会如何工作?
源文件:https://github.com/lattera/glibc/blob/master/malloc/malloc.c(行:5141)。
答案 0 :(得分:2)
来自include/stap-probe.h
:
Without USE_STAP_PROBE, that does nothing but evaluates all
its arguments (to prevent bit rot, unlike e.g. assert).
Systemtap's header defines the macros STAP_PROBE (provider, name) and
STAP_PROBEn (provider, name, arg1, ..., argn). For "provider" we paste
in MODULE_NAME (libc, libpthread, etc.) automagically.
The format of the arg parameters is discussed here:
https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation
The precise details of how register names are specified is
architecture specific and can be found in the gdb and SystemTap
source code. */
所以:
malloopt()
的工作方式并不重要。