虚拟内存去哪里?!

Uron 2016-04-09 08:46:00
接手别的项目后,在紧跟着main函数后面用VirtualAlloc申请不到一个G的虚拟内存都失败!?

用GlobalMemoryStatus函数查看内存情况,发现在刚进入main函数时当前可用虚拟内存已经消耗了绝大多数,这是怎么回事呢?

1.是全局变量初始化导致了申请大量的虚拟内存?
2.VS2010里面进行了设置导致可用虚拟内存减少了吗?!

PS:win7系统64位,内存6G,总的虚拟内存有十几G!
...全文
174 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-04-11
  • 打赏
  • 举报
回复
VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
小灸舞 版主 2016-04-10
  • 打赏
  • 举报
回复
楼主试试GlobalMemoryStatusEx() 用GlobalMemoryStatusEx(), 不要用GlobalMemoryStatus(),MSDN上自己说的,后者可能会返回不正确的结果: GlobalMemoryStatus can return incorrect information. Use the GlobalMemoryStatusEx function instead
Uron 2016-04-10
  • 打赏
  • 举报
回复
什么情况会导致虚拟内存消耗了那么多啊?new VirtualAlloc 或者用内存映射文件都申请不了足够大的比如1G的内存了!!!
bluewanderer 2016-04-10
  • 打赏
  • 举报
回复
把代码贴出来吧。比如之前见过有一堆内存申请,并且每个都是MEM_COMMIT | MEM_RESERVE最后挂掉的奇葩代码...
小灸舞 版主 2016-04-10
  • 打赏
  • 举报
回复
要降低虚拟内存使用,方法就是优化你的数据结构和算法,和消除内存泄漏。 如果windows设置成系统管理页面文件,它会根据使用情况自动增加交换空间
renwotao2009 2016-04-10
  • 打赏
  • 举报
回复
引用 11 楼 cs290473786 的回复:
@5楼,可能GlobalMemoryStatus()不太精确,但是大致应该是差不多的。而且是因为虚拟内存不太够用了,我才用这个函数进行验证的!! [quote=引用 9 楼 renwotao2009 的回复:] [quote=引用 7 楼 cs290473786 的回复:] [quote=引用 2 楼 renwotao2009 的回复:] 你这项目静态加载了多少库,虚拟地址空间都不够用吗
可能是加载的库里面会申请一些内存导致的吗?[/quote]可能,都是公用的库,还是你们自己写的[/quote] 这种情况自写写的话,那就只能一个个的看是哪里申请了大量内存还是说检查内存泄漏吗?在库里面进行检查吗?[/quote]你们自己写的库的话,可以检查下有没有申请大量空间的代码看能不能优化,或改成动态载入形式,用时载入不用卸载。
Uron 2016-04-10
  • 打赏
  • 举报
回复
@5楼,可能GlobalMemoryStatus()不太精确,但是大致应该是差不多的。而且是因为虚拟内存不太够用了,我才用这个函数进行验证的!!
引用 9 楼 renwotao2009 的回复:
[quote=引用 7 楼 cs290473786 的回复:] [quote=引用 2 楼 renwotao2009 的回复:] 你这项目静态加载了多少库,虚拟地址空间都不够用吗
可能是加载的库里面会申请一些内存导致的吗?[/quote]可能,都是公用的库,还是你们自己写的[/quote] 这种情况自写写的话,那就只能一个个的看是哪里申请了大量内存还是说检查内存泄漏吗?在库里面进行检查吗?
Uron 2016-04-10
  • 打赏
  • 举报
回复
引用 10 楼 jdgdf566 的回复:
你把内存当硬盘吗
用虚拟内存或者内存映射文件,申请一两个G很正常啊 ?
jdgdf566 2016-04-10
  • 打赏
  • 举报
回复
你把内存当硬盘吗
renwotao2009 2016-04-10
  • 打赏
  • 举报
回复
引用 7 楼 cs290473786 的回复:
[quote=引用 2 楼 renwotao2009 的回复:] 你这项目静态加载了多少库,虚拟地址空间都不够用吗
可能是加载的库里面会申请一些内存导致的吗?[/quote]可能,都是公用的库,还是你们自己写的
Uron 2016-04-10
  • 打赏
  • 举报
回复
引用 2 楼 renwotao2009 的回复:
你这项目静态加载了多少库,虚拟地址空间都不够用吗
可能是加载的库里面会申请一些内存导致的吗?
Uron 2016-04-10
  • 打赏
  • 举报
回复
引用 1 楼 yuelengdihai 的回复:
全局变量也不会申请几个G的内存吧,资源管理器里面看看vs占了多少内存,程序占了多少内存, 感觉是越界引起的内存泄露
main函数才刚进入,怎么看哪里内存泄漏啊?都没有进行malloc和new操作。
Uron 2016-04-10
  • 打赏
  • 举报
回复
引用 3 楼 qq423399099 的回复:
要降低虚拟内存使用,方法就是优化你的数据结构和算法,和消除内存泄漏。 如果windows设置成系统管理页面文件,它会根据使用情况自动增加交换空间
是win7操作系统,看虚拟内存设置里面是系统自动管理的!
renwotao2009 2016-04-09
  • 打赏
  • 举报
回复
你这项目静态加载了多少库,虚拟地址空间都不够用吗
cocoabird 2016-04-09
  • 打赏
  • 举报
回复
全局变量也不会申请几个G的内存吧,资源管理器里面看看vs占了多少内存,程序占了多少内存, 感觉是越界引起的内存泄露

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧