Linux下调用sys_brk扩展内存时是否会被零初始化?
关于
sys_brk/brk扩展内存的初始化问题 - 结论先行:这种零初始化的行为不是操作系统的保证,只是特定场景下的巧合
- 具体细节:
- 当你通过
brk扩展的是从未被映射过的新物理页时,出于安全考虑,内核会自动把这部分内存清零(避免泄露其他进程曾使用过的数据),这是你看到零值的原因 - 但如果是之前通过
brk缩小堆空间后,再次扩展回原来的范围,这部分内存会保留之前使用过的旧数据,不会被重新清零
- 当你通过
- 建议:如果你的程序需要可靠的零初始化内存,不要依赖
brk的这种偶然行为,应该使用calloc函数,或者手动调用memset来完成初始化
内容的提问来源于stack exchange,提问作者Andrew Johnson
相关产品推荐
相关产品推荐

