AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes解决方法

打开一个编译选项启用ASan的程序:

AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes

然后程序启动失败。

原因:

[cfe-dev] Question about Clang/LLVM addresssanitizer

/proc/sys/vm/overcommit_memory是一个用于控制内存过度承诺(overcommit)策略的虚拟文件。

内存过度承诺是指在分配内存时,操作系统是否允许分配比实际物理内存更多的内存。该策略允许应用程序分配比可用内存更多的内存,但这可能导致系统在实际使用时出现内存不足的情况。

/proc/sys/vm/overcommit_memory文件的值可以设置为以下三个选项之一:

0:表示内存过度承诺策略被禁用。这是默认值,表示内核会根据实际的物理内存和交换空间来决定是否允许分配内存。
1:表示内存过度承诺策略被启用。内核会允许分配超过实际物理内存大小的内存,但在实际使用时可能会导致Out-of-Memory(OOM)错误。
2:表示内存过度承诺策略被启用,并且在分配内存时考虑了交换空间的大小。这种模式下,内核会允许分配超过实际物理内存和交换空间之和的内存。

通过修改/proc/sys/vm/overcommit_memory文件的值,可以调整系统的内存过度承诺策略,以满足特定应用程序或系统需求。

解决方法:

# 1. 检查/proc/sys/vm/overcommit_memory的值,如果是2,则修改为0
sudo bash -c "echo 0 > /proc/sys/vm/overcommit_memory" 
# 2. 虚拟内存设置为无限制
ulimit -v unlimited
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值