精华内容
下载资源
问答
  • VMMap
    2022-07-20 14:26:20

    相关工具官方下载地址:

    vmmap下载地址:VMMap - Windows Sysinternals | Microsoft Docs

    ProcessMonitor下载地址:进程监视器 - Windows Sysinternals | Microsoft Docs 

    procexp下载地址:进程资源管理器 - Windows Sysinternals | Microsoft Docs

    下面我根据VMMap来详细介绍一下内存的分类.

    内存是一个很复杂的系统,其中的paging file,sharable memory,reserve和commit等概念使得要算清楚一个进程到底使用了多少内存几乎成了不可能的事情了。

    还好我们有VMMap这个工具,它用两个纬度将内存进行了详细的划分。

    一个是纵向的纬度,也就是内存是从哪里来的。分为

    1. Image(可执行文件),
    2. Mapped file(由CreateFileMapping以文件作为back up)。
    3. Sharable(由CreateFileMapping以内存作为 back up)
    4. Private Data(由Virtual Alloc分配)
    5. Heap(由new,GlobalAlloc和HeapAlloc等分配)
    6. Stack(栈占用的空间)
    7. Page table(内核里面维护当前虚拟地址空间所需要的内存)
    8. Managed Heap(由.NET garbage collector分配和管理)

    还有一个横向的维护,分别被称为:

    1. Size: 总体大小,包括了commit和没有reservce的内存。如果这项和Committed不 一致,那么就是说有reserve的内存。
    2. Committed: committed的大小,包括Private内存和可共享的内存。
    3. Private:属于当前进程的虚拟内存,指的是当你修改他时仅仅当前进程会受到影响。(copy-on-wirte属性的页面还没被修改时也属于此类)

    以上实际上是虚拟内存(virtual memory)的概念,其中的内容可能被物理内存(physical memory)back up,也可能被Paging file back up。

    而以下的几个指标指的是物理内存:

    1. Total WS: 所有的working set,包括private working set和sharable working set。
    2. Private WS: private working set。仅属于当前进程的working set。
    3. Sharable WS。可共享的working set。
    4. Shared WS。已经共享的working set,这个值应该是sharable working set的一部分或者全部。

    为了更具体的了解这几个指标,下面我们根据一些API的具体行为所产生的结果来观察一下他们的含义。

    New,GlobalAlloc and HeapAlloc:

    受影响的是VMMap中的Heap行。

    分配时占用的是Committed和Private列,working set不受影响。

    当访问时Total working set和Private Working Set跟着上升。

    VirtualAlloc:

    受影响的是VMMap中的Private Data行。

    分配Reserve的data时,上升的是第一列Size,第二列Committed不变。

    Commit时,上升的是Committed和Private列。Total Working Set列不变。

    当访问Commit的内存时,上升的是Total Working set 和Private Working set列。

    DeCommit时,只有第一列size保持不变,Committed,Private和Working set列都下降。

    Release时,第一列Size也下降。

    Memory Based CreateFileMapping

    这个file mapping不管有没有命名,下面的行为都一样。

    受影响的是VMMap中的Sharable行。

    调用CreateFileMapping时,不影响任何列,增加的只是系统的Total Commit Charge。

    调用MapViewOfFile时,上升的是Size和Committed列。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。

    调用UnmapViewOfFile时,Size,Committee和Working set列都下降。

    调用CloseHandle来关闭CreateFileMapping创建的handle时,不影响任何列, 但是减少了系统的Total Commit Charge。

    共享状态下的Memory based CreateFileMapping

    需要注意的是这个file mapping命名了,并且是在同一个进程中打开两次,以达到共享的目的。

    受影响的是VMMap中的Sharable列。

    调用第一个调用CreateFileMapping时,不影响任何列,增加的只是系统的Total Commit Charge。

    调用MapViewOfFile时,上升的是Size和Committed列。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。

    以上行为跟前面一个Scenario完全一样,下面要开始创建再次打开刚才创建的File mapping.

    当用同样的名字再次调用CreateFileMapping打开前面创建的file mapping时,系统的Total Commit Charge不受影响,也不影响VMMap中的任何列。

    调用MapViewOfFile时,上升的是Size和Committed列。也就是说,上升第二次了。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。也是上升第二次。

    调用UnmapViewOfFile来ummap掉第二次打开的view,Size,,commmited和working set都下降一半。

    调用UnmapViewOfFile来ummap掉第一次打开的view,Size,,commmited和working set都下降到初始状态。

    调用CloseHandle来关闭第二次打开的Handle,Total Commit charge不受影响。

    调用CloseHandle来关闭第一次打开的Handle,Total Commit charge下降。

    File Based CreateFileMapping

    受影响的是Mapped File行。

    调用CreateFileMapping时,没有影响到VMMap中的任何列,并且跟Memory Based File mapping不一样的是,Total Commit Charge也不受 影响,因为他是以File 作为back up的

    调用MapViewOfFile时,上升的是Size和Committed列。跟Memory Based File mapping一样的表现。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。跟Memory Based File mapping一样的表现。

    调用UnmapViewOfFile时,Size,Committee和Working set列都下降。跟Memory Based File mapping一样的表现。

    调用CloseHandle来关闭CreateFileMapping创建的handle时,不影响任何列, 也不影响Total Commit Charge。

    总结:file based和memory based不同点在于:

    1. File based影响是Mapped file行,memory based影响的是Sharable行。
    2. File based 不影响total commit charge, memory based 影响。

    更多相关内容
  • VMMap是一个免费的工具,可以用来分析应用程序使用虚拟和物理内存的情况。 VMMap对程序员是非常有用的。如果您在寻找免费的工具来理解和优化您的应用程序的内存使用量 ,那么你可以尝试VMMap。 除了内存使用图形来...
  • vmmap(shaoyu10zi).exe

    2021-05-25 09:16:27
    vmmap(shaoyu10zi).exe
  • 推荐:可以解决Windows内存问题的工具 电脑的内存在一定程度上影响着电脑的运行,所以内存的利用率的大小也是与电脑的使用正常有着很大的关系,因此,以下为大家推荐一款可以解决Windows内存问题的工具,以此来让你...
  • 工具——vmmap

    2018-12-18 16:52:19
    Windows sysinternal中的组件vmmap,用于查看内存情况。
  • VMMap 3.21

    2016-11-14 15:26:51
    VMMap 3.21
  • 先上vmmap工具下载链接: 链接:https://pan.baidu.com/s/1EqdKrVR-BXdGAmIOmYcWYw 提取码:2af3 一、什么是内存泄漏? 内存泄漏是指程序分配内存,然后在不再需要时不将其归还。泄漏的内存被浪费了,因为程序...

    先上vmmap工具下载链接:

    链接:https://pan.baidu.com/s/1EqdKrVR-BXdGAmIOmYcWYw 
    提取码:2af3 
     

    一、什么是内存泄漏?


    内存泄漏是指程序分配内存,然后在不再需要时不将其归还。泄漏的内存被浪费了,因为程序本身不再使用它,但在程序退出之前没有其他东西可以使用它。
    高内存使用率并不总是意味着存在内存泄漏。如果您正在做的事情本身就需要大量内存,并且在操作完成后该内存被返还,那么这不是内存泄漏。
    内存泄漏通常是无界。如果你继续做一些触发泄漏的事情,那么内存使用通常会不断增加。(如果内存使用量只在你第一次做某事时增加,而且增加不是很大,那么它可能只是一个分配缓存的组件,它将重新使用它以加快未来的操作。这样的缓存通常在一个几分钟不活动,尽管这取决于组件。)


    二、使用 VMMap 查找内存泄漏


    如果您使用任务管理器查看,它可能会说 explorer.exe 或 dopus.exe 正在使用大量内存,但它不会告诉您在哪里责怪谎言。程序本身可能存在错误,但它几乎总是第三方组件。这是找出哪一个的方法。
    下载免费的 VMMap 工具从 Microsoft/SysInternals 中提取其 zip 文件。VMMap 是一个低级调试工具,但别担心,我们要用它做的事情很简单。

    1. 双击 VMMap.exe,它应该会打开一个包含正在运行的进程列表的窗口。
    在该窗口的顶部,单击Launch and trace a new process选项卡,然后输入 dopus.exe 的路径,如下所示。
    不要单击“确定”。

    剪辑图像002

    2. 在点击确定之前,您需要退出 Directory Opus (dopus.exe),以便 VMMap 重新启动它。(这将允许 VMMap 记录新 dopus.exe 所做的内存分配。) 默认情况下,
    简单地关闭所有 Opus 窗口不会退出它。使用 Opus 托盘图标菜单上的退出选项。(另请参阅:如何退出 Directory Opus。)

    3. 现在在 VMMap 中点击 OK;它应该重新启动 Opus。
    VMMap 还会显示一个彩色数字列表,但不要担心理解它们。:)
    保持 VMMap 和 Opus 运行;从现在开始不要关闭它们中的任何一个。

    4. 以触发内存泄漏的方式使用 Directory Opus。
    理想情况下,多次触发泄漏,使其大而容易找到。(如果可以的话,让它至少泄漏 10MB,或者更多,这样它就可以从其他内存分配中脱颖而出。)
    使用标准的任务管理器来关注 dopus.exe 的内存使用情况,这样你就可以知道何时触发了泄漏.

    5. 返回 VMMap 并按F5(或单击View -> Refresh)使其刷新。

    6. 单击VMMap 窗口底部的Trace...

    剪辑图像004

    7. 在出现的跟踪窗口中,按字节列排序并滚动到列表顶部。
    它应该看起来像这样,其中第一项的 Bytes 值比其他项大得多: 如果第一项没有相对较大的 Bytes 值,那么您可能需要多次触发泄漏(保持 VMMap 运行并记住每次回到它时都要刷新它),否则您可能根本不正确地认为存在泄漏。否则,继续...

    clip_image006

    8. 选择第一项,然后单击Trace 窗口底部的Stack...。

    9. 您现在将看到分配内存时涉及的 DLL(和 dopus.exe)列表,如下所示: 导致内存泄漏的组件通常是列表中的第一个非 Windows DLL。您通常可以忽略路径以C:\Windows开头的那些(例如 ntdll.dll 和 user32.dll)。 在上面的例子中,内存泄漏是由 LeakyShellExtension.dll 引起的,你可以猜到,这是我为本指南编写的一个 shell 扩展,它故意泄漏内存。我写它是为了每次右键单击一个文件时泄漏大约 10MB,然后右键单击文件几次,使其总共泄漏大约 70MB。
     

    clip_image008


     

    10.一旦你有一个可疑的DLL,名称和路径通常足以识别它属于什么。如果没有,请在磁盘上找到 DLL,右键单击它,选择“属性”,然后转到“详细信息”选项卡。这通常包含有关谁制作它以及它是什么的信息。
    有时也值得查看列表中的其他一些 DLL。
    一旦您知道 DLL 属于什么,您可以尝试卸载(或更新)它以查看泄漏是否消失。
    如果泄漏消失,那么您就知道向谁报告错误。
    如果泄漏仍然存在,请重复该过程并查看指示了哪些 DLL。如果它又是同一个 DLL,那么您就知道您没有成功卸载它。如果它是另一个 DLL,也许第一个是无辜的,可以重新安装。

    三、vmmap内存指标详解

    任务管理器中关于内存的两个重要概念:private和working set。但是内存远不止那么简单,下面我根据VMMap来详细介绍一下内存的分类。

    内存是一个很复杂的系统,其中的paging file,sharable memory,reserve和commit等概念使得要算清楚一个进程到底使用了多少内存几乎成了不可能的事情了。

    还好我们有VMMap这个工具,它用两个纬度将内存进行了详细的划分

    一个是纵向的纬度,也就是内存是从哪里来的。分为

    1、Image(可执行文件),
    2、Mapped file(由CreateFileMapping以文件作为back up)。
    3、Sharable(由CreateFileMapping以内存作为 back up)
    4、Private Data(由Virtual Alloc分配)
    5、Heap(由new,GlobalAlloc和HeapAlloc等分配
    6、Stack(栈占用的控件)
    7、Page table(内核里面维护当前虚拟地址控件所需要的内存)
    8、Managed Heap(由.NET garbage collector分配和管理)
                   

    还有一个横向的维护,分别被称为:

     

    Size: 总体大小,包括了commit和没有reservce的内存。如果这项和Committed不 一致,那么就是说有reserve的内存。
    Committed: committed的大小,包括Private内存和可共享的内存。
    Private:属于当前进程的虚拟内存,指的是当你修改他时仅仅当前进程会受到影响。(copy-on-wirte属性的页面还没被修改时也属于此类)
    以上实际上是虚拟内存(virtual memory)的概念,其中的内容可能被物理内存(physical memory)back up,也可能被Paging file back up。

    而以下的几个指标指的是物理内存:

    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的一部分或者全部。
     

    四、vmmap实践验证总结

    实际运行应用程序各个内存区域的使用情况如下图(F5刷新):

    展开全文
  • vmmap内存统计工具

    2017-12-01 16:41:30
    vmmap内存统计工具 window很实用的一个内存使用展示工具,方便调试window程序
  • vmmap 观察jvm内存 监控jvm jvm线程
  • vmmap是sysinternals工具集中的一个工具,主要用于分析一个进程的虚拟内存和物理内存的使用情况。更有效的是,可以通过对比两个不同时间的内存使用情况的Snapshot,来查找内存泄露问题。 vmmap介绍 当你用vmmap去...

    vmmapsysinternals工具集中的一个工具,主要用于分析一个进程的虚拟内存和物理内存的使用情况。更有效的是,可以通过对比两个不同时间的内存使用情况的Snapshot,来查找内存泄露问题。

    vmmap介绍

    当你用vmmap去查看一个正在运行的进程的时候。可以看到如下图,不同类型的内存使用采用不同的颜色标明。VMMap主要列举了以下几种类型的内存使用情况:

    • Free: 图中显示137434599232K,是不是被吓到了。这个一般是指虚拟地址空间。每个进程都有自己的虚拟地址空间,比如32位的一般为4G,其中2G是内核地址空间, 2GB用户态地址空间;64位理论上为2^64个字节,实际上没那么大,按照MSDN的描述64位的Windows用户态可使用地址空间为128TB
    • Heap: 这个主要就是指我们通过C/C++的malloc, new;以及HeapAlloc等申请的内存大小
    • Image: 比较好理解,一般指进程启动的运行文件,比如Exe或者加载的DLL文件。
    • Managed Heap: 这个一般指用C#编写代码使用的托管堆。比如一个程序可能是C#和C++均有实现,这个时候可以查看是不是托管堆占用的内存持续增高,那么就可以判断一般是C#部分托管堆使用有问题造成了泄露。
    • Mapped File: 主要是指内存映射文件,熟悉的同学应该知道,这也是常用的进程间通信的一种方式。
    • Private Data: 主要指通过VirtualAlloc申请的内存空间。这里也注意同Free主要是指已经使用的地址空间,而非已经Commit的内存。比如下图中,
    • Stack: 函数栈所使用的内存大小
    • Shareable: 主要是进程间可以共享的内存,但是后备存储器为RAM或者Paging File(一般是指虚拟内存page.sys)。
    • Page Table: 主要指内核中和该进程页表相关联的内存

    在这里插入图片描述
    对于其他的描述,本人本人主要介绍两种:

    • Committed: 对于一个虚拟地址空间的使用,我们可以是申请地址空间,但不提交(commit),如果不提交,则不会占用真实的存储器空间(比如RAM或者Paging File),只有commit后才会使用物理内存(RAM或者Paging File)。那么VMMap这里所指的内存就是后备存储器为RAM, Paging File, 或者Mapped file。
    • Working Set: 一般内存有RAM,还有虚拟内存(page.sys),而根据内存的调度原理,并不是所有的内存都常驻RAM。Working Set就是主要指在RAM中所使用的内存。

    VMMap分析内存泄露

    笔者曾经有一次用过VMMap分析过内存泄露,但是最终问题并不是通过VMMap分析出来的,主要是因为当运行到比较长的时间的时候VMMap偶尔会出现崩溃的情况。但是VMMap确实可以辅助分析出内存泄露问题,笔者也是将这个方法分享给大家。
    下面是一段便于读者理解Vmmap分析方法的样例。首先每隔10秒钟,申请10M内存,总共申请10次;然后每隔10秒释放1次内存,只释放5次。这样操作,可以简单模拟,一个程序在运行中既有正常的内存申请释放的场景,也有申请后却没有释放的场景,这样交错在一起,让问题更加逼近现实。这样也便于使用这种方法,在未来碰到问题的时候进行实战。

    #include <iostream>
    #include <chrono>
    #include <thread>
    #include <windows.h>
    
    void HeapMemoryLeakSample()
    {
    	const int iListSize = 10;
    	char* pHeapList[iListSize];
    	//Alloc 10 Heap STR_SIZE
    	const int STR_SIZE = 10 * 1000 * 1000;
    	for (int i = 0; i < iListSize; i++)
    	{
    		pHeapList[i] = new char [STR_SIZE];
    		strcpy_s(pHeapList[i], STR_SIZE, "Alloc Memory");
    		std::cout << pHeapList[i] << std::endl;
    		std::this_thread::sleep_for(std::chrono::seconds(10));
    	}
    
    	//Free 5 Heap space
    	for (int i = 0; i < iListSize; i++)
    	{
    		if (i % 2 == 0)
    		{
    			delete pHeapList[i];
    			std::cout << "Free Memory" << std::endl;
    			std::this_thread::sleep_for(std::chrono::seconds(10));
    		}
    	}
    }
    
    int main()
    {
    	HeapMemoryLeakSample();
    	while (true)
    	{
    		std::this_thread::sleep_for(std::chrono::seconds(10));
    	}
    	return 0;
    }
    

    接下来一起来查看是如何定位一个程序的内存泄露的。
    第一步 配置好程序的位置,工作目录,以及符号文件目录:
    在这里插入图片描述
    在这里插入图片描述
    第二步 当运行程序,首先看到整个VMMap界面。这个时候映入眼帘的好多好多数据,该看什么呢? 首先对于一般的C++程序而言,堆的内存泄露使用是最常见,那么就先看下Heap部分的Committed大小是不是很大。比如本文的样例,发现已经有70M左右的大小。先锁定到溢出内存类型为Heap
    在这里插入图片描述
    第三步 个人认为查找内存泄露也需要一些技巧和常识的。比如程序刚启动不久的时候,申请的很多资源是全局的,或者伴随着整个进程的生命周期的,那么刚启动后的内存的增长一般可以忽略,不认为是内存泄露的原因。再大概程序运行一段时间后(根据自己程序实际情况而定),基本的伴随整个进程的生命周期的资源已经创建完毕。此时可以使用TimelineAddress部分的功能对照查看。

    这个时候首先选择Heap(点击一下),那么Address部分将会显示Heap所占用的内存。然后当我们打开Timeline,选择特定的时间段区域,比如上图中选择区域为刚开始申请内存的部分,每隔10秒,增加申请10M内存。此时重要的是Address部分也会动态的展示这段时间的内存变化。
    在这里插入图片描述
    然后注意其中的内存使用比如000001B39E445000的内存被申请了,然后拉长时间线,发现很长时间还是存在在Address栏中,并且绿色,就说明一直没有被释放。
    在这里插入图片描述
    此时当你选中这个地址,再选择Heap Allocations,便可以看到其申请的大小为10000000, 双击打开后便可以查看到函数调用栈了。如下图所示便可以找到是在HeapMemoryLeakSample函数内调用了new,并且有行号提示(不过这里的行号提示不够精准,但是也不影响你去分析问题了)。

    也可以不选择区间,而选个某个时间点,查看内存的状态。
    在这里插入图片描述
    第四步 如果很幸运,第三步已经找到问题了。 第四步本来想说一说Call Stack的追踪的,比如通过申请的内存的Count或者Bytes来查找到可疑的内存泄露点的函数调用栈。可是笔者多次实验后均发现,数据对不上。比如下图的Count百分比和Bytes百分比之和均对不上100%。所以笔者也不会对此做过多的赘述,调试软件同样也是软件,也可能存在bug或者一些限制。但是通过如上的方法和思想,也许能够协助你找到内存泄露点,至少可以起到辅助的作用。
    在这里插入图片描述

    相关阅读

    1. <<Windows内存泄露分析之DebugDialog>>
    2. <<Windows程序内存泄漏(Memory Leak)分析之Windbg>>
    3. <<Windows程序内存泄漏(Memory Leak)分析之UMDH>>
    展开全文
  • vmmap64.exe

    2021-05-25 09:16:52
    vmmap64.exe
  • 但是内存远不止那么简单,下面我根据VMMap来详细介绍一下内存的分类。 内存是一个很复杂的系统,其中的paging file,sharable memory,reserve和commit等概念使得要算清楚一个进程到底使用了多少内存几乎成了不可能...

    任务管理器中关于内存的两个重要概念:private和working set。但是内存远不止那么简单,下面我根据VMMap来详细介绍一下内存的分类。

    内存是一个很复杂的系统,其中的paging file,sharable memory,reserve和commit等概念使得要算清楚一个进程到底使用了多少内存几乎成了不可能的事情了。

    还好我们有VMMap这个工具,它用两个纬度将内存进行了详细的划分。

    一个是纵向的纬度,也就是内存是从哪里来的。分为

    1. Image(可执行文件),
    2. Mapped file(由CreateFileMapping以文件作为back up)。
    3. Sharable(由CreateFileMapping以内存作为 back up)
    4. Private Data(由Virtual Alloc分配)
    5. Heap(由new,GlobalAlloc和HeapAlloc等分配)
    6. Stack(栈占用的控件)
    7. Page table(内核里面维护当前虚拟地址控件所需要的内存)
    8. Managed Heap(由.NET garbage collector分配和管理)

                   

    还有一个横向的维护,分别被称为:

     

    1. Size: 总体大小,包括了commit和没有reservce的内存。如果这项和Committed不 一致,那么就是说有reserve的内存。
    2. Committed: committed的大小,包括Private内存和可共享的内存。
    3. Private:属于当前进程的虚拟内存,指的是当你修改他时仅仅当前进程会受到影响。(copy-on-wirte属性的页面还没被修改时也属于此类)

    以上实际上是虚拟内存(virtual memory)的概念,其中的内容可能被物理内存(physical memory)back up,也可能被Paging file back up。

    而以下的几个指标指的是物理内存:

    1. Total WS: 所有的working set,包括private working set和sharable working set。
    2. Private WS: private working set。仅属于当前进程的working set。
    3. Sharable WS。可共享的working set。
    4. Shared WS。已经共享的working set,这个值应该是sharable working set的一部分或者全部。

     

    为了更具体的了解这几个指标,下面我们根据一些API的具体行为所产生的结果来观察一下他们的含义。

     

    New,GlobalAlloc and HeapAlloc:

    受影响的是VMMap中的Heap行。

    分配时占用的是Committed和Private列,working set不受影响。

    当访问时Total working set和Private Working Set跟着上升。

     

    VirtualAlloc:

    受影响的是VMMap中的Private Data行。

    分配Reserve的data时,上升的是第一列Size,第二列Committed不变。

    Commit时,上升的是Committed和Private列。Total Working Set列不变。

    当访问Commit的内存时,上升的是Total Working set 和Private Working set列。

    DeCommit时,只有第一列size保持不变,Committed,Private和Working set列都下降。

    Release时,第一列Size也下降。

     

    Memory Based CreateFileMapping

    这个file mapping不管有没有命名,下面的行为都一样。

    受影响的是VMMap中的Sharable行。

    调用CreateFileMapping时,不影响任何列,增加的只是系统的Total Commit Charge。

    调用MapViewOfFile时,上升的是Size和Committed列。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。

    调用UnmapViewOfFile时,Size,Committee和Working set列都下降。

    调用CloseHandle来关闭CreateFileMapping创建的handle时,不影响任何列, 但是减少了系统的Total Commit Charge。

     

    共享状态下的Memory based CreateFileMapping

    需要注意的是这个file mapping命名了,并且是在同一个进程中打开两次,以达到共享的目的。

    受影响的是VMMap中的Sharable列。

    调用第一个调用CreateFileMapping时,不影响任何列,增加的只是系统的Total Commit Charge。

    调用MapViewOfFile时,上升的是Size和Committed列。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。

    以上行为跟前面一个Scenario完全一样,下面要开始创建再次打开刚才创建的File mapping.

    当用同样的名字再次调用CreateFileMapping打开前面创建的file mapping时,系统的Total Commit Charge不受影响,也不影响VMMap中的任何列。

    调用MapViewOfFile时,上升的是Size和Committed列。也就是说,上升第二次了。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。也是上升第二次。

    调用UnmapViewOfFile来ummap掉第二次打开的view,Size,,commmited和working set都下降一半。

    调用UnmapViewOfFile来ummap掉第一次打开的view,Size,,commmited和working set都下降到初始状态。

    调用CloseHandle来关闭第二次打开的Handle,Total Commit charge不受影响。

    调用CloseHandle来关闭第一次打开的Handle,Total Commit charge下降。

     

    File Based CreateFileMapping

    受影响的是Mapped File行。

    调用CreateFileMapping时,没有影响到VMMap中的任何列,并且跟Memory Based File mapping不一样的是,Total Commit Charge也不受 影响,因为他是以File 作为back up的

    调用MapViewOfFile时,上升的是Size和Committed列。跟Memory Based File mapping一样的表现。

    当访问这些map的数据时,上升的是Total Working Set和Sharable Working Set。跟Memory Based File mapping一样的表现。

    调用UnmapViewOfFile时,Size,Committee和Working set列都下降。跟Memory Based File mapping一样的表现。

    调用CloseHandle来关闭CreateFileMapping创建的handle时,不影响任何列, 也不影响Total Commit Charge。

    总结:file based和memory based不同点在于:

    1. File based影响是Mapped file行,memory based影响的是Sharable行。
    2. File based 不影响total commit charge, memory based 影响。
    展开全文
  • 14-VMMap.zip

    2016-06-05 11:38:03
    windows核心编程VMMap源码,修改后在visual stadio 2013中编译通过,功能正常。
  • VMMap 虚拟内存查看器

    2011-07-18 08:10:28
    非常强大的内存查看器可以查看几乎所有进程包括杀毒软件的内存映射表。
  • VMMap工具在此下载; https://docs.microsoft.com/zh-cn/sysinternals/downloads/vmmap VMMap 是一个进程虚拟和物理内存分析实用程序。 它显示了进程的已提交虚拟内存类型的细分,以及操作系统为这些类型分配的物理...
  • VMMap是一个免费的工具,可以用来分析应用程序使用虚拟和物理内存的情况。VMMap对程序员是非常有用的。如果您在寻找免费的工具来理解和优化您的应用程序的内存使用量,那么你可以尝试VMMap
  • 虚拟内存查看工具,可列出进程地址空间内所有虚拟地址空间,以及系统地址空间划分等等
  • VMMap.zp 内存分析工具

    2019-04-21 17:20:54
    VMMap是一个免费的工具,可以用来分析应用程序使用虚拟和物理内存的情况。
  • windows提供了很多性能监控工具,不比Linux差多少,这里介绍下vmmap。 官方路径: https://docs.microsoft.com/en-us/sysinternals/downloads/vmmap 截图: Committed:当前进程分配的虚拟内存。
  • VMMAP的简单使用

    千次阅读 2019-02-22 11:08:00
    vmmap.exe 执行了 Ctrl+E 之后 发现将 heap 和managed heap 的内容放到了pagefile 里面 任务管理器里面的内存占用小了. 任务管理器里面的信息 以后找一下学习资料学习一下相关的内容. 转载于:...
  • VMMap名词说明 Committed: 进程向OS宣称要使用的内存大小(在虚拟内存进行了分配),基本上都不等于进程实际使用的物理内存大小。一是其中统计了进程所链接的所有动态库的空间,比如标准C库,而实际上OS在内存中只...
  • VMMap v2.5

    2010-01-29 14:25:06
    虚拟内存和物理内存分析工具,微软官方的工具,有助于理解内存的运行管理机制。
  • VMMAP定位内存泄露

    千次阅读 2018-03-28 16:29:21
    1.启动VMMAP,配置运行程序pdb位置:Options-&gt;Configure Symbols 2.通过VMMAP,启动应用程序:File-&gt;Select Process 3.分析应用程序堆数据 注意:如果内存泄露随着时间推移,肯定相同的内存...
  • 内存查看工具vmmap

    2017-11-05 13:14:40
    内存查看工具,调试程序的好助手,太牛了;能看到里面的各类内存的分布,64位的也支持了,;当年调试3gb开关可用;甚至能够发现内存碎片
  • 无论是exe,还是dll,上面讲的实例句柄都比较抽象,能否以感官认知,来进行理解,为此我此处用到了内存查看工具VMMap。 首先,我们来用win32窗口例子来说明,此处我用的是vs2015,固定住exe在虚拟内存中的加载地址...
  • vmmap是一个进程虚拟和物理内存分析实用程序。它显示进程提交的虚拟内存类型以及操作系统分配给这些类型的物理内存量(工作集)的细分。除了内存使用的图形化表示,vmmap还显示摘要信息和详细的进程内存映射。强大的...
  • VMMap是一个免费的工具,可以用来分析应用程序使用虚拟和物理内存的情况。
  • 使用 VMMap 查看进程地址空间分配 VMMap VMMap is a process virtual and physical memory analysis utility. It shows a breakdown of aprocess's committed virtual memory types as well as theamount of ...
  • 微软出的工具,可以查看活动进程的空间利用情况。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,186
精华内容 474
关键字:

VMMap