macOS Monterey下clang带ASAN编译C程序出现malloc提示的原因咨询
问题原因说明
1. 提示的本质
这个输出是macOS系统malloc分配器的通知类警告,不属于你的程序代码错误,也不影响程序正常运行和AddressSanitizer的检测功能。
2. 具体产生逻辑
- macOS的malloc默认实现了
nano zone优化机制:专门为小于256字节的小内存分配设计的快速分配区域,能有效降低小内存分配的开销和内存碎片。 - AddressSanitizer(ASan)工作时需要预先占用进程的一大段虚拟地址空间作为影子内存,用来记录所有内存块的访问、分配状态。
- 在你使用的macOS Monterey 12.0.1 + Xcode 13 clang环境下,nano zone需要预分配的虚拟地址范围,刚好和ASan要预留的影子内存地址范围产生了冲突。
- 系统malloc检测到目标地址段已经被ASan占用后,就会自动放弃启用nano zone,回退到默认的普通分配模式,同时输出你看到的这段提示。
3. 消除提示的方法
如果不想看到这条提示,可以在运行程序前指定关闭nano zone的环境变量即可:
MallocNanoZone=0 ./a.out
内容的提问来源于stack exchange,提问作者Sudheer Hebbale
相关产品推荐
相关产品推荐

