Windows 应用内存的那些词儿

·  阅读 77
Windows 应用内存的那些词儿

开篇

当我们说我们要优化应用内存,我们到底要优化什么呢?任务管理器中哪些和内存相关数值都代表什么呢?

内存分类

image.png

应用程序与内存

32 位应用程序内存占用示意图 image.png 进程空间中的地址(虚拟地址)和物理内存的地址转换如下 ps:以上为计算机操作系统的知识,如果不知道的小伙伴可以自行搜索一下,我在这里就不赘述了

用于查看应用内存的使用情况的工具

任务管理器(系统:win 11)

Peocess Explorer

由于上面两个工具字段有重叠的部分,所以放在一起描述

内存描述.png

VMap

image.png

纵向字段解释:

  • Heap(由new,GlobalAlloc和HeapAlloc等分配)
  • Image(可执行文件)
  • Managed Heap(由.NET Garbage Collector分配和管理)
  • Mapped File(由CreateFileMapping以文件作为back up)
  • Page Table(内核里面维护当前虚拟地址控件所需要的内存)
  • Private Data(由VirtualAlloc分配)
  • Sharable(由CreateFileMapping以内存作为 back up)
  • Stack(栈占用的空间)

横向字段解释:

  • 虚拟内存(virtual memory)大小同 Process Explorer 中的 virtual size

    • Size: 总体大小,包括了commit和reservce的内存
    • Committed: committed的大小,包括专用内存和可共享的内存。
    • Private:专用内存。(copy-on-wirte属性的页面还没被修改时也属于此类)
  • 物理内存(working set),含义和 Process Explorer 及任务管理器中相同:

    • Total WS: 所有的 working set=private working set+sharable working set。
    • Private WS: private working set。仅属于当前进程的working set。
    • Sharable WS。可共享的working set。
    • Shared WS。已经共享的working set,这个值应该是sharable working set的一部分或者全部。

image.png

一些假装能帮你优化内存的API

EmptyWorkingSet

  • 定义:将进程占用的物理内存换出到虚拟内存中(换出单位是物理页面的整数倍,被换出的页的条件可能是进程没有调用的代码、数据等)
  • 副作用:
    • 再次分配新的对象时,系统需要把一些代码和数据再次换进到物理内存,这时候就会发生页面切换(这个时间可能会很长),而页面切换的时候就会产生页面错误(页面错误是经常发生的),由于页面切换的延时和页面错误,那么就有可能发生内存分配失败,那么你的程序就无法运行。
    • 频繁的换页操作会消耗更大的资源
    • 千万不能将它作用到你的桌面进程,后果自行尝试😶‍🌫️😶‍🌫️😶‍🌫️

SetProcessWorkingSetSize

  • 定义:使用这个函数来设置应用程序最小和最大的运行空间,只会保留需要的内存.当应用程序被闲置或系统内存太低时,操作系统会自动调用这个机制来设置应用程序的内存.应用程序也可以使用 VirtualLock 来锁住一定范围的内存不被系统释放
  • 副作用:当你加大运行空间给应用程序,你能够得到的物理内存取决于系统,这会造成其他应用程序降低性能或系统总体降低性能,这也可能导致请求物理内存的操作失败,例如:建立 进程,线程,内核池

结语

安全感是什么,是你努力为自己筑起的高高的围墙,是无论多晚回家都为你亮着的那盏灯,还是银行卡上那一串缓慢增长的数字呢,我觉得都不是,安全感应该是一种相信,相信哪怕来自于一个陌生人的善意,相信你在那个人心中就是不可替代的,相信自己有抵御任何风浪的能力,归根结底,是要相信所谓的安全感只有自己能给自己。——《我在他乡挺好的》

分类:
开发工具
标签:
分类:
开发工具
标签:
收藏成功!
已添加到「」, 点击更改