社区
API
帖子详情
内存和虚拟内存!
niefuhua
2002-11-28 08:24:45
如何知道所有正在运行的程序各自占据了多少内存和虚拟内存?
...全文
68
5
打赏
收藏
内存和虚拟内存!
如何知道所有正在运行的程序各自占据了多少内存和虚拟内存?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
suntt
2002-11-29
打赏
举报
回复
UP
programart_life
2002-11-29
打赏
举报
回复
如果只针对主题问题,没有那么麻烦啊,用Winnt下的“任务管理器”就看见了!
ysp128
2002-11-29
打赏
举报
回复
由于窗体和控件是可见的,所以它们与其它对象的存活期不同。例如,即使释放了对窗体的所有引用,也不会关闭该窗体。Visual Basic 维护整个工程所有窗体的全局集合,只有当窗体卸载时才能从集合中删除该窗体。
同样的,Visual Basic 为每个窗体维护一个控件集合。可以从控件数组中加载或卸载控件,但简单地释放对控件的所有引用并不能撤消它。
详细信息 有关窗体和控件集合的内容已在本章的“Visual Basic 中的集合”中以作了讨论。
Visual Basic 窗体经历的状态
通常地,Visual Basic 窗体在整个存活期中有四种状态:
创建,但不加载。
加载,但不显示。
显示。
内存和资源完全收回。
在一定环境下,窗体可有第五种状态:当其中有一个控件仍被引用时,窗体处于卸载和未引用状态。
本主题将描述这些状态及状态之间的转换。
创建,但不加载
Initialize 事件是该状态开始的标志。因而,放在 Form_Initialize 事件过程中的代码,就是窗体创建时最先执行的代码。
处于这种状态时,窗体是作为一个对象而存在,但还没有窗口。而且它的控件也不存在。虽然该状态可能很短暂,但任何窗体都要经过该状态。
例如,如果执行 Form1.Show,则窗体被创建,Form_Initialize 开始执行;一旦 Form_Initialize 执行完毕,该窗体被加载,这是下一个状态。
在指定窗体为启动对象时会发生同样的过程。在“工程”菜单中,选取“工程属性”对话框,然后选定“通用”选项卡,就可以指定一个窗体为启动对象。一旦窗体被指定为启动对象,该窗体在工程启动时就被创建,并立即加载和显示。
注意 正如下面描述的,通过调用窗体的 Show,或使用内置的属性和方法,都可以从 Form_Initialize 中加载窗体。
保持创建,但不加载的状态
相反的,以下的代码创建 Form1 的实例,但不让其进入加载状态:
Dim frm As Form1
Set frm = New Form1
一旦 Form_Initialize 结束,在不强制加载窗体的情况下,所能执行的过程只有能添加到该窗体代码窗口的 Sub、Function 和 Property 过程。例如,可以给 Form1 添加以下的方法:
Public Sub ANewMethod()
Debug.Print "Executing ANewMethod"
End Sub
使用变量 frm(也就是 frm.ANewMethod),可以在窗体不强制进入下一状态的情况下调用该方法。同样的,可以调用 ANewMethod 创建窗体:
Dim frm As New Form1
frm.ANewMethod
由于 frm 声明为 As New,所以直到代码中首次使用该变量之前,上述情况是调用 ANewMethod,该窗体不能创建。上面的代码执行后,该窗体保持在已创建状态,但没有加载。
注意 只要运行 Form1.ANewMethod,无需声明窗体变量,也可以达到上述示例的效果。正如“定制窗体类”中所解释的,Visual Basic 为每一个窗体类创建一个隐含的全局变量。该变量名和类名相同,这可想象为 Visual Basic 进行了 Public Form1 As New Form1 声明。
可以在不加载窗体的情况下,任意运行定制的属性和方法。然而,一旦访问了窗体内置的任一属性或控件,该窗体就进入下一状态。
注意 把一个窗体分为两部分是非常有用的,一部分是代码部分,另一部分是可视部分。窗体加载前,只有代码部分在内存中。这样,可以不加载窗体的可视部分,而在代码中任意调用过程。
所有窗体都需经过的唯一状态
创建完毕但未加载,是所有窗体都需经过的唯一状态。如果上述示例中变量 frm 被设置为 Nothing,则该窗体在进入下一状态前就撤消了:
Dim frm As New Form1
frm.ANewMethod
Set frm = Nothing '窗体被撤消。
这样使用的窗体不会比类模块好,所以绝大部分窗体进入下一状态。
加载但不显示
Load 事件标志着此状态的开始。一旦窗体进入加载状态,Form_Load 事件过程中的代码就开始执行。
Form_Load 事件过程开始后,窗体上的所有控件都被创建和加载,而且该窗体有了一个窗口─ 是通过窗口句柄 (hWnd) 和设备描述体 (hDC) 完成的,尽管该窗口还未被显示。
任何窗体只有加载后才能可见。
很多窗体自动从创建但不加载状态进入加载但不显示状态。窗体如果满足以下的条件就会自动加载:
该窗体在“工程属性”对话框的“通用”选项卡中被指定为启动对象。
窗体中首先被调用的属性或方法是 Show 方法,正如示例 Form1.Show。
首先被调用的窗体属性或方法是窗体内置的成员,如上述例子中是 Move 方法。
注意 因为每个控件定义了窗体的一个属性,所以这种情况包括了窗体的所有控件;也就是说,为了访问 Command1 的 Caption 属性,就必须经过窗体的 Command1 属性:Command1.Caption。
niefuhua
2002-11-28
打赏
举报
回复
上面那位仁兄,可以说得详细一点吗?谢谢
SeeMeStudio
2002-11-28
打赏
举报
回复
使用WMI就可以得到。
什么是
虚拟
内存
?
虚拟
内存
的原理
虚拟
内存
最近看Binder原理的时候,讲到一个概念MMap,Memory Map,
内存
映射,一言蔽之就是物理
内存
和
虚拟
内存
的映射(这个不是重点)。然而突然产生个疑问——什么是
虚拟
内存
?我大概是傻了,横竖睡不着,坐起身来,看了很多帖子,字里行间写着两个大字“懵逼”。一方面我着急弄清楚Binder、mmap原理,一方面悬在我心里的疑问让我惶惶不可终日,左思右想,还是先弄清楚什么是
虚拟
内存
,毕竟不积畦步无以至千里。 坎坷之路 什么是
虚拟
内存
?我百度半天,帖子不少,或许是我愚钝理解能力不行,没有一篇帖子能告诉
Linux
虚拟
内存
和物理
内存
的理解
首先,让我们看下
虚拟
内存
:第一层理解1. 每个进程都有自己独立的4G
内存
空间,各个进程的
内存
空间具有类似的结构2. 一个新进程建立的时候,将会建立起自己的
内存
空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中
内存
空间的分配情况,哪些地址有数据,哪些地址无数据,
虚拟
内存
(为什么要有
虚拟
内存
)
操作系统有
虚拟
内存
与物理
内存
的概念。在很久以前,还没有
虚拟
内存
概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有
虚拟
内存
,且每次开启一个进程都给4G的物理
内存
,就可能会出现很多问题: 因为我的物理
内存
时有限的,当有多个进程要执行的时候,都要给4G
内存
,很显然你
内存
小一点,这很快就分配完了,于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后,再将等待的进程装入
内存
。这种频繁...
虚拟
内存
和物理
内存
的区别和联系
1.
虚拟
内存
的发展由来 在计算机的远古时代其实还没有
虚拟
内存
机制,程序指令所访问的
内存
地址就是物理
内存
地址. 也就是不得不把程序的全部装进
内存
当中,然后运行 。 首先我们知道的物理
内存
其实就是插在计算机主板
内存
槽上的实际物理
内存
,CPU可以直接进行寻址.物理
内存
的容量是固定的,但是寻址空间却取决于cpu地址线条数,如32位机,则寻址空间为2^32 = 4G.所以最大支持4G的寻址空间.即使我们插入了16G的
内存
条,我们也只是拥有4G
内存
.我们其实发现无论好多事物只要是...
物理
内存
和
虚拟
内存
当内核代码不再需要通过 get_free_pages() 分配的物理页面块时,它会调用 free_pages(unsigned long addr, unsigned int order) 函数,其中 addr 参数是指向要释放的物理页面块的起始物理地址,而 order 参数是与分配时使用的 order 参数相同,用于指示要释放的页面数量。综上,
虚拟
内存
是一种操作系统的关键特性,它允许程序访问比物理
内存
更大的地址空间,并提供了一种灵活的
内存
管理机制,以提高系统的性能、稳定性和多任务处理能力。
API
1,488
社区成员
23,270
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章