glibc中的暂存缓冲区意味着什么?

问题描述 投票:2回答:2

我发现以下代码会导致堆泄漏,如果我使用draconian模式使用tcmalloc堆检查器对其进行检查,但LSan找不到泄漏(我假设LSan中抑制了glibc中的内部分配)

#include <string.h>
#include <netdb.h>

int foo() {
    struct addrinfo hints, *res;
    memset(&hints, 0, sizeof hints);

    getaddrinfo("www.example.com", 0, &hints, &res);

    freeaddrinfo(res);
}

int main() {
    foo();
}

我进行了更多检查,发现getaddrinfo()内部在glibc中使用scratch buffer并怀疑那些暂存缓冲区会导致内存泄漏(即使这不是有害的)

但是可惜的是,没有完整的解释并且只说“临时缓冲区是具有堆栈默认分配的可变大小缓冲区” ;;

但是什么临时缓冲区确实在做什么?

您可以参考glibc/include/scratch_buffer.h here

c glibc libc tcmalloc leak-sanitizer
2个回答
1
投票
摘自google-perftools的自述文件:

0
投票
内部,所有NSS接口(其中getaddrinfo是一个)看起来像gethostbyname_r
© www.soinside.com 2019 - 2024. All rights reserved.