为什么malloc不会“使用”我的电脑上的内存?

为什么malloc不会“使用”我的电脑上的内存?,第1张

概述所以我有这个程序分配256 MB的内存,用户按ENTER键后会释放内存并终止. #include <stdio.h>#include <stdlib.h>int main(void) { char *p, s[2]; p = malloc(256 * 1024 * 1024); if ( p == NULL) exit(1); print 所以我有这个程序分配256 MB的内存,用户按ENTER键后会释放内存并终止.
#include <stdio.h>#include <stdlib.h>int main(voID) {    char *p,s[2];    p = malloc(256 * 1024 * 1024);    if ( p == NulL)         exit(1);    printf("Allocated");     fgets(s,2,stdin);    free(p);    return 0;}

我多次运行这个程序,并且对它们进行了背景化,直到不再有足够的内存被分配.但是,从来没有发生过.我运行了一个linux top命令,甚至在运行这个程序多次后,空闲的内存永远不会下降近256 MB.

但是,另一方面,如果我使用calloc而不是malloc,那么有一个巨大的区别:

p = calloc(256 * 1024 * 1024,1);

现在如果我运行程序和背景,并重复,每次运行它,可用内存下降256 MB.为什么是这样?为什么malloc不会导致可用的可用内存更改,但是calloc呢?

解决方法 malloc()不使用内存.它分配它.

分配内存后,通过分配一些数据来使用它.

size_t Size = 256 * 1024 * 1024;p = malloc(Size);if (p != NulL) {  memset(p,123,Size);}

一些平台实现malloc()是这样一种方式,直到该字节(或更可能的是一个字节中的一个字节或“页面”字节)被访问之前,才会发生内存的物理消耗.

calloc()可能也可能不会真正使用内存.系统可以将大量内存映射到相同的物理归零内存,至少直到数据变得有趣.看到
Why malloc+memset is slower than calloc?

总结

以上是内存溢出为你收集整理的为什么malloc不会“使用”我的电脑上的内存?全部内容,希望文章能够帮你解决为什么malloc不会“使用”我的电脑上的内存?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存