首先,我注意到当我 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);
最佳答案
一些注意事项:
- 如评论所述,Linux 在您使用内存之前实际上不会分配内存。
- 当您使用 calloc 而不是 malloc 时,它会将您请求的所有内存归零。这相当于使用它。
关于c - Malloc 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383059/