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
相关产品推荐
相关产品推荐

