首先,我注意到当我使用malloc分配内存时,与calloc相比,内存占用量不同。我正在处理几GB的数据集。这些数据是随机的,所以可以。
我原以为只需malloc大量内存,然后读取其中的随机数据并转换为float类型即可。但是,查看进程查看器中的内存占用量时,显然没有占用内存(与calloc不同,calloc的内存占用量很大)。我运行了一个循环来将数据写入内存,然后我看到内存占用量上升了。我的问题是:在我初始化内存之前,这块内存是否实际上被占用了?
最后,在传递1024 * 1024 * 128字节(进程查看器中的1024 MB)后,我开始收到段错误。然而,Calloc似乎会初始化所有内存,直到1 GB。为什么我在使用malloc在for循环中初始化内存时,到达128MB时就会收到段错误,而内存占用量显示为1024MB?
如果我从内存中malloc一大块内存,然后从中读取数据,那我得到的是什么(因为进程查看器几乎没有显示任何内存占用量,直到我初始化它)?
最后,有没有办法让我分配超过4GB的内存?我正在测试内存层次结构的性能。
#2的代码:
我原以为只需malloc大量内存,然后读取其中的随机数据并转换为float类型即可。但是,查看进程查看器中的内存占用量时,显然没有占用内存(与calloc不同,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);