社区
进程/线程/DLL
帖子详情
内存映射文件,不断写数据物理内存上涨
dahaiI0
2012-03-05 09:45:59
CreateFileMapping创建映像文件100M,MapViewOfFile返回char*指针,通过这个指针写入100M数据,为什么物理内存会不断上涨,写完后又降下来了。
...全文
324
24
打赏
收藏
内存映射文件,不断写数据物理内存上涨
CreateFileMapping创建映像文件100M,MapViewOfFile返回char*指针,通过这个指针写入100M数据,为什么物理内存会不断上涨,写完后又降下来了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Lactoferrin
2012-03-06
打赏
举报
回复
[Quote=引用 18 楼 dahaii0 的回复:]
代码很少
DWORD dwSize = 50*1024*1024;
char *p = new char[dwSize ];
ASSERT(P);
for(int i = 0;i<dwSize ;i++)
{
*(p+i) = 1;
}
delete []p;
[/Quote]
手机没法试
先猜测两个原因
1.太快了,任务管理器来不及显示
2.全优化掉了
dahaiI0
2012-03-06
打赏
举报
回复
[Quote=引用 16 楼 lactoferrin 的回复:]
一次映射完,然后顺序写一遍,则每个页都要分配帧,很占内存
[/Quote]
多谢列宁同志的指点
dahaiI0
2012-03-06
打赏
举报
回复
多谢,结贴
Lactoferrin
2012-03-06
打赏
举报
回复
[Quote=引用 21 楼 dahaii0 的回复:]
引用 16 楼 lactoferrin 的回复:
一次映射完,然后顺序写一遍,则每个页都要分配帧,很占内存
这里提到的每个页面都要分配帧,指的是进程虚拟空间中的页面还是物理内存中的页面?
[/Quote]
页是指虚拟内存的,帧是物理内存的
fly4free
2012-03-06
打赏
举报
回复
猜测
CreateFileMapping
MapViewOfFile
可能仅仅是做了一个mark,真正访问的时候才会 分配内存空间。
而再次访问就没必要了。
dahaiI0
2012-03-06
打赏
举报
回复
[Quote=引用 16 楼 lactoferrin 的回复:]
一次映射完,然后顺序写一遍,则每个页都要分配帧,很占内存
[/Quote]
这里提到的每个页面都要分配帧,指的是进程虚拟空间中的页面还是物理内存中的页面?
dahaiI0
2012-03-05
打赏
举报
回复
代码很少
DWORD dwSize = 50*1024*1024;
char *p = new char[dwSize ];
ASSERT(P);
for(int i = 0;i<dwSize ;i++)
{
*(p+i) = 1;
}
delete []p;
Lactoferrin
2012-03-05
打赏
举报
回复
于此对比的是,new几百M字节的缓冲区,写入数据到缓冲区。delete这个缓冲区,物理内存基本没变化,这里new返回的指针应该也是个虚拟地址,写入数据也要通过CPU映射到物理内存,为啥这又没变化?
给代码
Lactoferrin
2012-03-05
打赏
举报
回复
一次映射完,然后顺序写一遍,则每个页都要分配帧,很占内存
zhanshen2891
2012-03-05
打赏
举报
回复
怕吃内存你还用它干什么?
dahaiI0
2012-03-05
打赏
举报
回复
[Quote=引用 14 楼 danscort2000 的回复:]
你不会是把整个文件都给映射到内存中去了吧?
应该分段映射
[/Quote]
请问为什么要分段映射?文件没有超过4G,就几百M,能保证一次映射完。我也听别人说过要分段映射,但是为什么要这样做呢
danscort2000
2012-03-05
打赏
举报
回复
你不会是把整个文件都给映射到内存中去了吧?
应该分段映射
dahaiI0
2012-03-05
打赏
举报
回复
我用映射文件,都是把整个文件一次映射进去,是不是应该分段映射,如果分段映射,每次映射多少数据合适?64KB?几M?
dahaiI0
2012-03-05
打赏
举报
回复
最后问个关于使用内存映射文件,物理内存变化的问题,将一个磁盘文件映射到进程的虚拟地址空间,这与物理内存应该是木有关系的,把数据写入映射文件,CPU会将虚拟地址映射到物理内存,通过任务管理器能发现在写数据时,物理内存会不断上涨,写完关闭映射才降下来,请问这是什么原因?
于此对比的是,new几百M字节的缓冲区,写入数据到缓冲区。delete这个缓冲区,物理内存基本没变化,这里new返回的指针应该也是个虚拟地址,写入数据也要通过CPU映射到物理内存,为啥这又没变化?
恳请高人指点,若能解决分不是问题
dahaiI0
2012-03-05
打赏
举报
回复
楼上的大哥好,我现在碰到个问题,同时开了几个线程,每个线程都各自往一个映射文件里写数据(文件都可能是几百M),物理内存很容易就飙升到80,90%多,这个有什么办法可以解决下
gameslq
2012-03-05
打赏
举报
回复
有什么问题?本来CreateFileMapping就是物理空间换时间的技术。
dahaiI0
2012-03-05
打赏
举报
回复
一次映射整个文件与分段映射在效率和内存方面有什么区别,假设文件不超过4G,我写了个例子,发现2者没什么区别,物理内存都涨了10-20%多,写完数据都降下来了。
Lactoferrin
2012-03-05
打赏
举报
回复
[Quote=引用 8 楼 dahaii0 的回复:]
引用 7 楼 lactoferrin 的回复:
不相信操作系统可以用无缓冲io,自己管理缓存
请教下,能否具体明示之,俺不太清楚
[/Quote]
CreateFile里面FILE_FLAG_NO_BUFFERING
dahaiI0
2012-03-05
打赏
举报
回复
[Quote=引用 6 楼 stjay 的回复:]
FlushViewOfFile 一下
[/Quote]
多谢,我先试下。
dahaiI0
2012-03-05
打赏
举报
回复
[Quote=引用 7 楼 lactoferrin 的回复:]
不相信操作系统可以用无缓冲io,自己管理缓存
[/Quote]
请教下,能否具体明示之,俺不太清楚
加载更多回复(3)
物理内存
和虚拟内存
虚拟内存和
物理内存
物理内存
是真正的内存,在应用中顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。看机器配置的时候,看的就是这个
物理内存
。 虚拟内存是为了满足系统对超出
物理内存
容量的需求时在外存(如硬盘)上开辟的存储空间。由于虚拟内存其实是放在外存上,因而与
物理内存
相比读
写
速度都非常慢。 我们知道,32位CPU,有32根地址线,那么它的寻址空间就是4GB。也就是说,如果没有其它的
Linux内存布局、内存分配原理
Linux的虚拟内存管理有几个关键概念 1.每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址 2.虚拟地址可通过每个进程的页表与物理地址进行映射,获得真正物理地址 3.如果虚拟地址对应的物理地址不在
物理内存
中,则产生缺页中断,并真正分配物理地址,同时更新进程的页表;如果此时
物理内存
已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。
Linux 内存地址分布
malloc的分配内存有两个系统调用,一个brk,一个mmap,brk是将.data的最高地址指针_edata往高地址走,mmap则是在进程的虚拟地址空间(在堆和栈之间的
内存映射
区域)找一块空间。) 所以我们常说的多少位系统,他的内存多大,都是说的虚拟内存空间。C.非初始化
数据
段。接下来所说的是嵌入式系统的内存地址空间的布局,简单的说就是我们
写
好的代码,在编译过程种中,把代码里不同的变量、函数相应的保存在每个段中(.text、.data、.bss),至于堆空间、栈空间是代码在芯片上运行时才存在的。
linux进程内存与 xmx,进程
物理内存
远大于Xmx的问题分析
问题描述最近经常被问到一个问题,”为什么我们系统进程占用的
物理内存
(Res/Rss)会远远大于设置的Xmx值”,比如Xmx设置1.7G,但是top看到的Res的值却达到了3.0G,随着进程的运行,Res的值还在递增,直到达到某个值,被OS当做bad process直接被kill掉了。top - 16:57:47 up 73 days, 4:12, 8 users, load average:...
已提交内存过大_你还记得虚拟内存吗?可能就是你电脑故障的罪魁祸首!
虚拟内存这个词,估计新生代里听说过的人不多。但如果你是电脑老鸟,或者经常玩大型游戏的话,虚拟内存应该或多或少还有些印象。在那个电脑性能相对羸弱,硬件价格又昂贵的年代,虚拟内存可以说是让人又爱又恨的存在,一方面它会占用大量存储空间,另一方面如果关掉它,又会导致卡顿,程序无法运行的情况。现在系统越来越聪明,电脑配置也越来越好, 我们几乎已经不需要再手动调整虚拟内存大小了,甚至有些朋友
物理内存
...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章