Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了malloc(及其堂兄弟)返回的内存块是否初始化为零?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我编写了一个代码来测试,以测试Linux和Windows操作系统的内存管理.为了进一步测试,我继续检查malloc()返回的内存中存在哪些值.返回的值都是0(零).我已经阅读了malloc的手册页,在Windows和Linux上都进行过检查,但是我无法找到这种行为的原因.根据联机帮助页 The malloc() function allocates

我编写了一个代码来测试,以测试@L_607_2@和Windows操作系统的内存管理.为了进一步测试,我继续检查malloc()返回的内存中存在哪些值.

返回的值都是0(零).我已经阅读了malloc的手册页,在Windows和Linux上都进行过检查,但是我无法找到这种行为的原因.根据联机帮助页

要清除内存段,必须手动使用memset().

#include <>dio.h>
#include Could not allocate the memory");
            }
        }

也许我错过了什么.
代码改编自here

编辑:问题已经回答here GCC特定输出.我相信Windows操作系统也会遵循相同的程序.

最佳答案
@H_474_45@malloc()返回的内存未初始化,这意味着它可能是任何内容.它可能是零,也可能不是; ‘not initialized’意味着它可以是任何东西(包括零).要获得保证归零页面,请使用calloc().

您看到归零页面(无论如何在Linux上)的原因是,如果应用程序请求新页面,这些页面将由操作系统归零(或者更确切地说,它们是固定页面的零写入时的复制写入图像,称为’全球零页’).但是,如果malloc()碰巧使用已经分配给应用程序的内存(此时已经被释放)(而不是扩展堆),您可能会看到非零数据.请注意,操作系统提供的页面归零是特定于操作系统的特征(主要用于安全性,因此一个进程最终不会发生碰巧有来自另一个进程的数据的页面),并且不是C标准强制要求的.

您要求get_free_page将页面归零source:表示’get_free_page()需要一个参数,一个优先级. …它需要关闭free_page_list页面,更新mem_map,将页面归零并返页面的物理地址. Here的另一篇文章解释得很好,也解释了为什么使用calloc()比malloc()memset()更好.

请注意,您没有将整个分配的块检查为零.你想要这样的东西(未经测试):

int n;
char nonzero=0;
char *buffer=malloc(sizeof(char)*chunk);     
if(buffer==NULL){
    return -1;
}
for (n = 0; n%s\n",nonzero?"nonzero":"zero");

大佬总结

以上是大佬教程为你收集整理的malloc(及其堂兄弟)返回的内存块是否初始化为零?全部内容,希望文章能够帮你解决malloc(及其堂兄弟)返回的内存块是否初始化为零?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。