收到错误:a.out(40780,0x1130af600) malloc: 由于无法预分配保留的虚拟机空间而放弃纳米区域

Sud*_*ale 9 c macos clang

我的程序cc非常简单

#include <stdio.h>

int main()
{
    int ret = 0;

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

当我使用“clang -fsanitize=address cc ”编译它并运行 a.out 时,会显示以下消息,但是程序运行成功

a.out(40820,0x106ffe600) malloc:由于无法预分配保留的虚拟机空间,纳米区域被放弃。

代码使用(Xcode 13)Apple clang版本13.0.0(clang-1300.0.29.3)编译目标:x86_64-apple-darwin21.1.0线程模型:posix

操作系统是 macOS Monterey (12.0.1)

任何更好地理解这一点的见解都会有所帮助

Ahm*_*sud 15

太长了;

尝试:

MallocNanoZone=0 ./a.out 
Run Code Online (Sandbox Code Playgroud)

解释

注意:我的解释可能有点不准确,因为我只是研究它来回答问题:我只是简单地阅读了 libmalloc 代码以尝试了解正在发生的事情,这是我认为正在发生的事情:

libmalloc 中的例程nano_malloc尝试为预先计算的内存地址预先分配预先计算大小的内存。因为您将地址清理程序挂钩注入二进制文件(-fsanitize=address),所以地址无法用于计算 a.out 中预分配的确切大小...这又意味着预先确定多少空间是需要知道虚拟内存中的哪些频段出现了异常。

因此,您可以通过关闭预带分配来简单地禁用它...设置环境变量MallocNanoZone=0然后就可以了。