c - Malloc 内存问题

标签 c linux gcc malloc

首先,我注意到当我 malloc 内存与 calloc 时,内存占用是不同的。我正在处理几 GB 的数据集。此数据可以是随机的。

我希望我可以 malloc 大量内存并读取其中的任何随机数据并将其转换为 float 。然而,查看进程查看器中的内存占用空间显然没有被声明(与我看到大占用空间的 calloc 相比)。我运行了一个循环将数据写入内存,然后我看到内存占用量攀升。 我所说的内存在我初始化之前实际上并没有被声明是否正确?

最后,在我传递了 1024*1024*128 字节(进程查看器中为 1024 MB)之后,我开始出现段错误。然而,Calloc 似乎将全部内存初始化为 1 GB。 为什么在使用 malloc 的 for 循环中初始化内存时出现段错误,这个数字为 128MB,为什么内存占用显示为 1024MB?

如果从内存中 malloc 大量,然后从中读取我得到了什么(因为进程查看器在我初始化之前几乎没有显示足迹)?

最后有什么方法可以让我分配超过 4GB 的空间吗?我正在测试内存层次结构性能。

#2 的代码:

    long long int i;
    long long int *test=(long long int*)malloc(1024*1024*1024);
    for (i=0;i<1024*1024*128;i++)
            test[i]=i;

    sleep(15);

最佳答案

一些注意事项:

  1. 如评论所述,Linux 在您使用内存之前实际上不会分配内存。
  2. 当您使用 calloc 而不是 malloc 时,它会将您请求的所有内存归零。这相当于使用它。

关于c - Malloc 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383059/

相关文章:

gcc - 如何从 C 代码引用段开头和大小

c - 不正确的寄存器 0x​​104567910 与 '%rbx' 后缀一起使用

无法读取C中的结构数组

c - 调试散列结果 : Lengths, 数组、字符

c - gcc 和 liboauth - 链接器找不到 oauth.h

linux - 导入签名证书问题 apache

c++ - zip 文件可以是稀疏的/不连续的吗?

c - 如果我是一线程写多读,怎么只写锁不读锁呢?

linux - 构建一个包含大字符串的文件

connect()在UDP客户端服务器中为C窗口中的IPv6地址提供错误