windoes任务管理器中的“句柄数”是啥意思!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windoes任务管理器中的“句柄数”是啥意思!相关的知识,希望对你有一定的参考价值。
参考技术A 分类: 电脑/网络 >> 软件 >> 其他软件解析:
句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。
sysinternals 进程资源管理器中的“虚拟大小”是啥
【中文标题】sysinternals 进程资源管理器中的“虚拟大小”是啥【英文标题】:What is "Virtual Size" in sysinternals process explorersysinternals 进程资源管理器中的“虚拟大小”是什么 【发布时间】:2011-03-03 02:20:05 【问题描述】:我的应用程序运行了几个小时,任务管理器的任何值(vmsize,内存)都没有增加。但几个小时后,我得到了内存错误。
在 sysinternals 中,我看到“虚拟大小”不断增加,当它达到 2 GB 左右时,我开始出现内存错误。
那是什么类型的内存泄漏? 我如何用代码演示它?是否可以使用任何内存值都没有增加但只有 sysinternsl 进程资源管理器中的虚拟大小增加的代码来重现相同的东西?
感谢任何建议
【问题讨论】:
那个问题应该有一个 Windows 标签。我很想从 Linux pov 中做出回应;) 【参考方案1】:从事情的声音来看,您的地址空间已经用完了。 32 位 Windows 将地址空间分成两半,一半用于用户程序,另一半用于系统,因此每个空间为 2 GB。
造成这种情况的最常见原因是将内存空间碎片化到无法找到足够大的块来分配的程度。不幸的是,如果不知道更多关于你在做什么,很难猜测为什么会发生这种情况。
【讨论】:
【参考方案2】:虚拟大小是进程分配的页数,那些 当前不在工作集中的页面(物理加载到 RAM 中)将在系统的页面文件中。
通常您分配未释放的内存。如果没有像 Rational Purify 或 Boundschecker 这样的特殊工具,这可能很难在代码中追踪。使用 sysinternals,您会发现肯定有泄漏,但它绝不会告诉您在哪里......
如果您的软件不是那么大,您可以尝试注销“新建”和“删除”,并通过管理已分配对象列表来查看内存中是否有太多对象(可以说是制作自己的内存调试器) . Windows 世界中有一些助手,例如CRT memory checking utils from Microsoft。它们在某些情况下很有用。
【讨论】:
谢谢,但特别是在 Process Explorer Virtual Size 的上下文中,至少在 2021 年会显示保留和提交的页面(WinAPI 中有一个技巧只保留地址空间)。保留的页面将是“不" 在系统的页面文件中。【参考方案3】:根据 sysinternals 论坛上的this thread,虚拟大小对应于进程的地址空间(我猜是已提交和保留的内存页)
【讨论】:
谢谢,听起来很正确。【参考方案4】:Virtual Size 似乎包括以下类型的已分配页面: MEM_MAPPED(用于数据视图) MEM_IMAGE(用于可执行图像视图) MEM_PRIVATE(通常分配的页内存)
它不是唯一的数据“内存”,还包括*.dll-s和FileMapping机制的页面空间。
【讨论】:
以上是关于windoes任务管理器中的“句柄数”是啥意思!的主要内容,如果未能解决你的问题,请参考以下文章
windows任务管理器中查看选项中的“显示内核时间”是啥意思?啥是“内核时间”?