Malloc内存问题

Malloc内存问题,第1张

概述Malloc内存问题

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

我期望我可以malloc大量的内存,并读取任何随机数据是在一个浮动。 然而,从进程查看器的内存占用情况来看,内存显然没有被声明(相比于calloc,我看到一个很大的脚印)。 我运行一个循环来将数据写入内存,然后我看到内存占用率攀升。 我是否正确地说,直到我初始化它之前,内存并没有被实际声明?

最后,我通过1024 * 1024 * 128字节(1024 MB的stream程查看器)后,我开始获得segfaults。 然而,Calloc似乎初始化了1 GB的全部数量。 为什么在初始化malloc的for循环的内存时出现segfaults,这个数字为128MB,为什么内存占用量是1024MB?

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

如何模拟C ++中的按键

在linux内核将页面写回到内存映射文件时捕获?

fseeko,fseeko64; ftello,ftello64 Visual C等价物

使用不同的表单调用已经打开的表单上的方法

为什么LD_PRELOAD似乎不能用wc写入

最后有没有办法让我分配超过4GB? 我正在testing内存层次结构性能。

代码#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);

realv()在我的env不喜欢NulL作为第二个参数?

检测模拟键盘/鼠标input

在UWP中播放audio的最简单方法是什么?

如何使用x11窗口背景加载bmp文件

C ++:将__int64转换为无符号长整型

1-如果您正在使用32位计算机,则不能分配超过2GB的变量。

2-如果您正在使用64位计算机,则可以分配的RAM和交换内存的总数尽可能多,但是,将所有分配给一个变量需要一个可能无法使用的大块内存。 尝试一个链接列表,其中每个元素只有1 MB的分配,你可以实现总共分配更高的内存。

3-如你和Sharth所指出的,除非你使用你的内存,否则linux将不分配它。

一些说明:

正如注释,linux直到使用它才会真正分配内存。

当您使用calloc而不是malloc时,它会清除您请求的所有内存。 这相当于使用它。

#2因为sizeof(long long int) > 8或者你的malloc返回NulL而导致segfault失败。 如果您要求1 GB的RAM,这是非常可能的。

更多关于#2的信息 从你的128 MB的评论我得到的想法,你可能没有意识到发生了什么事情。 因为你把数组指针声明为long long int ,每个数组元素的大小是8个字节。 1024/8 == 128这就是为什么你的循环工作。 无论如何,当我尝试它时,它就这样做了。

你的例子代码中的for循环实际上是触摸1GB的内存,因为它是索引128 * 1024 * 1024 long long ,每long long是8个字节。

总结

以上是内存溢出为你收集整理的Malloc内存问题全部内容,希望文章能够帮你解决Malloc内存问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存