为什么malloc没有“用完”计算机上的内存?

瑞安

因此,我有一个分配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;
}

我多次运行了该程序,并将它们分别作为背景,直到不再有足够的内存可以分配。但是,那永远不会发生。我运行了一个linuxtop命令,即使在多次运行该程序之后,可用内存也不会减少多达256 MB。

但是,另一方面,如果我使用calloc而不是malloc则存在巨大差异:

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

现在,如果我运行程序并使其后台运行,然后重复执行,则每次运行它时,可用内存都会减少256 MB。为什么是这样?为什么不malloc导致可用的可用内存改变,但是calloc为什么呢?

chux-恢复莫妮卡

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

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

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

某些平台实现malloc()的方式是,直到访问该字节(或更可能是字节组或字节的“页”中的某个字节)时才发生物理上的内存消耗。

calloc()可能会也可能不会真正使用内存。系统可以大量内存映射到相同的物理归零内存,至少直到数据变得有趣为止。请参见为什么malloc + memset比calloc慢?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么kswapd0在没有交换的计算机上运行?

来自分类Dev

为什么kswapd0在没有交换的计算机上运行?

来自分类Dev

Java FXML:为什么我的imageView没有显示,如何从计算机上载图像?

来自分类Dev

为什么编译时没有错误?为何它在32位计算机上而不是64位计算机上运行?

来自分类Dev

为什么在单核/处理器计算机上内存重新排序不是问题?

来自分类Dev

为什么Chrome在我的计算机上有这么多进程?

来自分类Dev

为什么对于char(在32位计算机上)只有1个填充字节?

来自分类Dev

为什么我的网站证书在不同的计算机上具有不同的“颁发者”?

来自分类Dev

为什么我的所有帐户密码(在计算机上)都一样?

来自分类Dev

网站没有在我的计算机上显示

来自分类Dev

在没有Windows的Dell计算机上更新UEFI?

来自分类Dev

为什么一台计算机上的带有子项的GPG解密失败,而另一台计算机上却失败?

来自分类Dev

为什么64位计算机上的内存访问错误指向32位地址?

来自分类Dev

为什么计算机有内存限制而不是存储限制

来自分类Dev

一台计算机上的OpenGL代码运行缓慢(但其他计算机上没有)

来自分类Dev

为什么我的计算机没有打开过去的启动屏幕?

来自分类Dev

为什么我的计算机没有在特定时间启动?

来自分类Dev

为什么没有Nvidia硬件的Linux计算机会消化Nvidia内核?

来自分类Dev

为什么在Windows和Linux计算机上使用file-io附加文件时会有不同的结果?

来自分类Dev

为什么我的计算机上的udisksctl命令说关闭电源不是有效的选择?

来自分类Dev

为什么Gnu在我的OSX计算机和Linux计算机上排序不同?

来自分类Dev

为什么计算机必须具有BIOS?

来自分类Dev

尽管有大量可用内存,为什么我的计算机确实真的很慢?

来自分类Dev

64位计算机上的C ++内存对齐

来自分类Dev

Ansible:有没有办法从目标计算机上的文件加载事实?

来自分类Dev

为什么仅在远程计算机上无法正确显示UTF-8编码的字符

来自分类Dev

从Visual Studio打开的CMD提示无法在我的计算机上启动exe。为什么不?

来自分类Dev

为什么wkhtmltopdf.exe在不同的Windows计算机上会产生不同的结果?

来自分类Dev

相同的p12证书,不同计算机上的信任链不同,为什么?

Related 相关文章

  1. 1

    为什么kswapd0在没有交换的计算机上运行?

  2. 2

    为什么kswapd0在没有交换的计算机上运行?

  3. 3

    Java FXML:为什么我的imageView没有显示,如何从计算机上载图像?

  4. 4

    为什么编译时没有错误?为何它在32位计算机上而不是64位计算机上运行?

  5. 5

    为什么在单核/处理器计算机上内存重新排序不是问题?

  6. 6

    为什么Chrome在我的计算机上有这么多进程?

  7. 7

    为什么对于char(在32位计算机上)只有1个填充字节?

  8. 8

    为什么我的网站证书在不同的计算机上具有不同的“颁发者”?

  9. 9

    为什么我的所有帐户密码(在计算机上)都一样?

  10. 10

    网站没有在我的计算机上显示

  11. 11

    在没有Windows的Dell计算机上更新UEFI?

  12. 12

    为什么一台计算机上的带有子项的GPG解密失败,而另一台计算机上却失败?

  13. 13

    为什么64位计算机上的内存访问错误指向32位地址?

  14. 14

    为什么计算机有内存限制而不是存储限制

  15. 15

    一台计算机上的OpenGL代码运行缓慢(但其他计算机上没有)

  16. 16

    为什么我的计算机没有打开过去的启动屏幕?

  17. 17

    为什么我的计算机没有在特定时间启动?

  18. 18

    为什么没有Nvidia硬件的Linux计算机会消化Nvidia内核?

  19. 19

    为什么在Windows和Linux计算机上使用file-io附加文件时会有不同的结果?

  20. 20

    为什么我的计算机上的udisksctl命令说关闭电源不是有效的选择?

  21. 21

    为什么Gnu在我的OSX计算机和Linux计算机上排序不同?

  22. 22

    为什么计算机必须具有BIOS?

  23. 23

    尽管有大量可用内存,为什么我的计算机确实真的很慢?

  24. 24

    64位计算机上的C ++内存对齐

  25. 25

    Ansible:有没有办法从目标计算机上的文件加载事实?

  26. 26

    为什么仅在远程计算机上无法正确显示UTF-8编码的字符

  27. 27

    从Visual Studio打开的CMD提示无法在我的计算机上启动exe。为什么不?

  28. 28

    为什么wkhtmltopdf.exe在不同的Windows计算机上会产生不同的结果?

  29. 29

    相同的p12证书,不同计算机上的信任链不同,为什么?

热门标签

归档