You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MALLOC_PERTURB_=256与mallopt效果不符,能否用其将double初始化为-nan?

问题:能否通过MALLOC_PERTURB_环境变量将未初始化double填充为-nan?

我希望通过环境变量MALLOC_PERTURB_将未初始化的double填充为-nan。测试发现,当设置值为256时,mallopt(M_PERTURB, 256)与MALLOC_PERTURB_的效果不一致——按文档两者本应等效。

测试环境为glibc-2.28和2.35。

测试代码

#include <iostream>
#include <stdlib.h>
#include <malloc.h>


void print_uninitialized_memory(){
  char* mperturb = getenv("MY_MALLOC_PERTURB_");
  if (mperturb) {
    mallopt(M_PERTURB, atoi(mperturb));
  }

  int* i = new int;
  long* l = new long;
  float* f = new float;
  double* d = new double;
  void** p = new void*;

  std::cout << "with PERTURB = " << (mperturb? mperturb:"unset") << std::endl;
  std::cout << "  undefined int: '" << *i << "'" << std::endl;
  std::cout << "  undefined long: '" << *l << "'" << std::endl;
  std::cout << "  undefined float: '" << *f << "'" << std::endl;
  std::cout << "  undefined double: '" << *d << "'" << std::endl;
  std::cout << "  undefined pointer: '" << *p << "'" << std::endl;
}


int main() {
  print_uninitialized_memory();
  return 0;
}

测试现象

  • 当设置值为0~255时,mallopt调用和MALLOC_PERTURB_环境变量对分配内存的填充值完全一致;
  • 当设置值为256时,mallopt(M_PERTURB, 256)会将未初始化的double设为-nan,但通过MALLOC_PERTURB_=256环境变量设置时,未初始化double的值为0。

请问是否可以通过环境变量MALLOC_PERTURB_将double初始化为-nan?


内容的提问来源于stack exchange,提问作者Jean-Didier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:59:50