当前位置: 首页 > 知识库问答 >
问题:

为什么malloc没有“用完”我电脑上的内存?

邵骏喆
2023-03-14
#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;
}

我多次运行这个程序,并对其中的每一个进行后台处理,直到不再有足够的内存可以分配。然而,这种情况从未发生过。我运行了一个linuxtop命令,即使多次运行这个程序,空闲内存也从未减少过256 MB。

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

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

共有1个答案

慕才
2023-03-14

malloc()不使用内存。它会分配它。

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

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

某些平台实现了malloc()这样一种方式,即在访问该字节(或更可能是一组或“页”字节中的一个字节)之前,不会发生内存的物理消耗。

 类似资料:
  • 问题内容: 因此,我有一个分配256 MB内存的程序,在用户按下ENTER键后,它将释放内存并终止。 我多次运行了该程序并将它们分别作为背景,直到不再有足够的内存可以分配。但是,那永远不会发生。我运行了linux 命令,即使在多次运行该程序之后,可用内存也不会减少多达256 MB。 但是,另一方面,如果我使用而不是则存在巨大差异: 现在,如果我运行该程序并使其后台运行,然后重复执行,则每次运行它时

  • 我正在尝试不同的方法来解决它5个小时,但不能任何方法工作。 这是我的网站。php文件: 这是Laptop.php(型号): 这是LaptopController.php(控制器):

  • 我有一个通过Interface Builder定义的布局约束视图。由于它们无法暂时停用,我决定通过拨打以下电话有选择地删除它们: 但是,之后约束仍然驻留在视图中。约束。此外,我还希望以编程方式添加约束(同样,因为我无法(取消)激活它们): 对我的方法的任何调用都会导致变量wasAdded的值NO。这也反映在用户界面上,它根本没有改变。 最后,我既不能以编程方式添加约束,也不能删除添加到情节提要的约

  • 问题内容: 这最终会消耗我所有的可用内存,然后进程被杀死。我曾尝试将标签从更改为“较小”标签,但这并没有什么不同。 我在做什么错/如何处理这个大文件? 我可以轻松地将其切碎并以较小的块进行处理,但这比我想要的还要难看。 问题答案: 当遍历整个文件时,将构建一棵树,并且不会释放任何元素。这样做的好处是元素可以记住其父元素是谁,并且您可以形成引用祖先元素的XPath。缺点是它会消耗大量内存。 为了在解

  • 请检查这段代码,看看@Arun R在如何计算覆盖另一个矩形的矩形面积中所说的算法有什么问题 为什么它没有删除其他内部的矩形

  • 我发现malloc()分配的内存空间比我要求的要多。 正如前面提到的代码一样,实际上为每个函数调用分配了32个字节(由top计算),但valgrind实际上只显示了每个调用16个字节。 为什么malloc分配的内存空间比我要求的要多,以及如何强制不要浪费那么多内存空间? 令人惊讶的是,即使结构为24字节,它也分配32字节,所以我猜内存空间被浪费了。我不确定是否应该分配32字节的倍数。如果是真的,那