- 浏览: 2058799 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
转自:http://www.cnblogs.com/del/archive/2008/05/06/1184847.html
经验证,源码可运行
Windows 是多任务的操作系统, 一个任务就是一个应用(应用程序)、一个应用占一个进程; 在一个进程里面, 又可以运行多个线程(所以就有了很多"多线程编程"的话题).
对 Win32 来讲, 系统给每个进程 4GB 的地址空间:
低端 2GB($00000000 - $7FFFFFFF) 给用户支配;
高端 2GB($80000000 - $FFFFFFFF) 留给系统使用.
文件或程序要调入内存才能工作, 先看看我们的内存到底有多大吧.
在系统盘根目录下有个 pagefile.sys 文件, 这就是我们的 "虚拟内存"(虚拟内存是以文件的形式存在的).
把 pagefile.sys 叫做 "虚拟内存" 似乎不妥, 所谓的 "虚拟" 只是相对真实的物理内存(RAM)来讲的; 很多书上的 "物理内存" 指的其实是: RAM + 虚拟内存, 也就是所有可用内存.
"虚拟内存" 在有些书上也被称作 "页文件" 、"页面文件" 或 "交换文件". "虚拟内存" 的大小可以从 "控制面板" 里设置, 默认是由系统自动管理的.
使用 "虚拟内存" 是系统的机制, 不管 RAM 有多大, 也应该使用 "虚拟内存".
RAM 大了, 系统就会少用 "虚拟内存", 从而提高速度; 但 RAM 也不是越大越好, 如果你真的放 4G 的内存条, 系统能够识别并使用的也就是 3G 左右, 因为 Win32 只有 4G 的管理能力(寻址能力), 当然这在 Win64 下要另当别论.
所谓系统给每个程序 4G, 是给 4G 的 "虚拟的地址表", 绝不是真实的内存, 不然一个记事本、一个计算器就得需要 8G.
这个 "虚拟的地址表" 在有些书上叫 "虚地址表"、"页映射表" 或 "虚内存地址", 也有叫 "虚拟内存地址", 很容易和 "虚拟内存" 的概念混淆.
这个 "虚拟的地址表" 上有 4G 个(4294967296 个)地址(0 - $FFFFFFFF), 虽然每个程序都有这样一个表, 但它们并不会冲突, 就因为这些地址是虚拟的, 系统在需要的时候会把它们映射成具体的真实内存的地址. 这样就阻断了一个进程对另一个进程的访问.
在 Win2000 以前的版本中, 用 GlobalAlloc 申请公用内存, 用 LocalAlloc 申请私有内存; 现在通过 "虚拟的地址表" 使用内存, 在进程中申请的内存都是私有的, 现在的 GlobalAlloc、LocalAlloc 没有区别, 都是执行同样的代码.
如果需要跨进程的公用内存空间, 需要用 "内存映射" 等手段, 这需要再专题学习.
总结概念: 物理内存、虚拟内存、虚地址表.
函数 GlobalMemoryStatus 可以获取它们的信息, 获取后放在 TMemoryStatus 结构中.
//TMemoryStatus 是 _MEMORYSTATUS 的重命名: _MEMORYSTATUS = record dwLength: DWORD; {结构长度} dwMemoryLoad: DWORD; {表示可用内存比例的一个整数, 100 表示内存都可用} dwTotalPhys: DWORD; {物理内存总数} dwAvailPhys: DWORD; {可用物理内存总数} dwTotalPageFile: DWORD; {虚拟内存总数} dwAvailPageFile: DWORD; {可用虚拟内存总数} dwTotalVirtual: DWORD; {虚地址表中的地址总数} dwAvailVirtual: DWORD; {虚地址表中可用的地址总数} end;
做个小程序看看内存情况:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var m: TMemoryStatus; const num = 1024 * 1024; begin GlobalMemoryStatus(m); Memo1.Clear; with Memo1.Lines do begin Add(Format('dwLength:' + #9 + '%d', [m.dwLength])); Add(Format('dwMemoryLoad:' + #9 + '%d', [m.dwMemoryLoad])); Add(Format('dwTotalPhys:' + #9 + '%d', [m.dwTotalPhys div num])); Add(Format('dwAvailPhys:' + #9 + '%d', [m.dwAvailPhys div num])); Add(Format('dwTotalPageFile:' + #9 + '%d', [m.dwTotalPageFile div num])); Add(Format('dwAvailPageFile:' + #9 + '%d', [m.dwAvailPageFile div num])); Add(Format('dwTotalVirtual:' + #9 + '%d', [m.dwTotalVirtual div num])); Add(Format('dwAvailVirtual:' + #9 + '%d', [m.dwAvailVirtual div num])); end; end; end.
我这里的运行效果图:
发表评论
-
form打开时的关闭代码
2011-10-25 20:29 1574摘自:http://topic.csdn.n ... -
TUpdateSQL更新问题 提示Update Failed
2011-08-29 20:26 1238摘自:http://topic.csdn.net/u/200 ... -
图解如何用Eurekalog跟踪程序错误
2011-08-12 07:28 941图解如何用Eurekalog跟踪程序错误 摘自:h ... -
VirtualBox 复制VDI 并能创建新的虚拟机
2011-07-21 11:14 2739摘自:http://www.nonabyte.net/how- ... -
截获所有异常 不报错
2011-07-12 16:52 1239摘自:http://media.ccidnet.c ... -
delphi exe程序以及DLL程序如何在模块内部获得各自的路径
2011-07-11 16:38 1305delphi Exe程序以及DLL程序如何在模块内部获得各自的 ... -
Delphi文本文件读写
2011-07-11 14:55 1244Delphi文本文件读写 (2008-10-31 1 ... -
Delphi自定义的消息的使用
2011-05-31 14:12 2315阅:已验证,可通过; 摘自:http://blog.1 ... -
怎么查看OutputDebugString输出的信息?debugview
2011-05-25 16:02 3835网上很多说用debugview查看,我自己写了一个程序,里面用 ... -
Delphi里查看该变量的内存值
2011-05-25 13:32 1122Delphi里查看该变量的内存值:Run==>Evalu ... -
注册表操作 写入autorun启动项,键值为本程序的全路径
2011-05-20 15:40 1825procedure TForm4.Button2Click ... -
报说包frx7和frxdb7都包含了某个单元的错误
2011-05-11 09:59 10221. 问题描述:在安装FastReport3的时候,安装到- ... -
Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
2011-05-03 14:34 1462摘自:http://blog.csdn.net/g ... -
WM_USER的说明 用户消息ID
2011-04-28 10:46 1687WM_USER 摘自:http://baike.bai ... -
ToolButton不能改变大小
2011-04-28 10:38 3462问题描述:ToolButton不能改变大小? 问 ... -
Delphi里TOOLBAR 上的button的caption为什么显示不出来啊
2011-04-20 17:55 1767Delphi里TOOLBAR 上的button的caption ... -
delphi指针简单入门
2011-04-11 21:42 1156摘自:http://topic.csdn.net/t/2003 ... -
Delphi中paramstr的用法 应用程序间传递数据
2011-04-01 14:33 2104Delphi中paramstr的用法 应用程序间传递数据 ... -
Delphi中的THashedStringList对象 --大数据量时
2011-04-01 13:54 5148Delphi中的THashedStringLi ... -
inherited Create(AOwner); 和直接写inherited有区别吗
2011-03-26 15:44 1324摘自:http://zhidao.baidu.com/que ...
相关推荐
- 实验过程中涉及的关键函数如`GlobalMemoryStatus()`用于获取当前内存状态,`VirtualAlloc()`和`VirtualFree()`用于动态分配和释放虚拟内存,这些函数的使用对于理解内存管理至关重要。 - 实验结果表明,动态内存...
在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过物理内存容量的虚拟内存。此外,Windows还使用了页面文件来扩展物理内存的容量。 在Java中,...
### 内存管理实验报告知识点解析 #### 一、实验设计与要求 ##### 设计目标与功能 本次实验旨在深入理解Windows操作系统中的内存管理机制,尤其是虚拟内存的分配与控制。设计要求涵盖以下几点: 1. **双线程设计*...
在Windows操作系统中,开发者可以调用WIN32 API函数来获取这些数据,如`GlobalMemoryStatus`和`GetSystemInfo`。 1. **`GlobalMemoryStatus`函数**: 这个函数用于获取当前系统的全局内存状态信息,包括物理内存、...
此外,Windows API提供了一组内存管理函数,如VirtualAlloc、VirtualFree、VirtualQuery等,用于应用程序动态地分配和释放内存。 Windows API中关于内存管理的函数调用主要包括: - reserve:保留一块内存区域,该...
2. **内存管理**:在WinCE中,内存管理是至关重要的,因为内存泄漏会导致系统性能下降,甚至系统崩溃。内存泄漏是指程序分配的内存未能被正确释放,久而久之,可用内存会逐渐减少。 3. **GlobalMemoryStatus函数**...
### 操作系统实验——内存管理 #### 实验背景与目的 在现代计算机系统中,内存管理是操作系统最为关键的功能之一。良好的内存管理不仅能够提高系统的性能,还能够确保多个应用程序安全稳定地运行。通过本实验,...
Windows CE内存管理报告深入解析了该操作系统如何高效地管理和利用内存资源。WinCE与传统的PC机在内存使用上有显著区别,特别体现在ROM和RAM的划分、虚拟内存机制以及内存分配方式上。 首先,Windows CE对ROM和RAM...
操作系统实验报告11-系统内存使用统计主要关注的是Windows操作系统中的内存管理机制,特别是通过API接口获取和理解系统内存的使用情况。实验的目标是让学生深入理解Windows内存管理的基础,包括页式存储管理技术和...
在操作系统中,内存管理是至关重要的一个部分,它负责有效地分配、使用和回收内存资源。这个实验主要关注的是系统内存的使用统计,特别是针对Windows操作系统。实验的主要目标是理解和掌握Windows内存管理机制,包括...
在易语言中,内存管理是编程过程中的一个重要环节,对于程序的运行效率和稳定性起着关键作用。 内存管理涉及到多个方面,包括内存的申请、释放、读写以及对内存状态的监控。在易语言中,我们可以使用特定的函数和...
实验的核心在于使用Windows系统提供的内存管理函数,如GlobalMemoryStatus()和MEMORYSTATUS结构来获取系统内存和虚拟内存的使用状态。GlobalMemoryStatus()函数用于获取系统内存的状态信息,这些信息被封装在...
学习这个源码不仅可以提升易语言编程技能,还能加深对内存管理的理解,尤其是如何使用API函数和易语言特性来实现系统级别的操作。 通过以上分析,我们可以看出“易语言COOL内存监控显示”是一个结合了易语言编程、...
通过深入理解`MEMORY_INFO`结构体和`GlobalMemoryStatus`函数的工作原理,开发者可以更加高效地监控和管理应用程序的内存使用,从而提升软件的整体性能和用户体验。 需要注意的是,虽然本文介绍的方法适用于特定的...
易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语句,降低了编程的门槛,使得更多非计算机专业的人也能进行程序开发...通过学习和实践,不仅可以提升易语言编程技能,还能深入理解计算机内存管理的原理。
这些API提供了对系统资源的直接访问,如文件系统、内存管理和进程线程的控制。下面将详细阐述这些知识点。 一、文件系统 1. **磁盘和驱动器管理**: - `GetLogicalDriveStringsW` 用于获取所有逻辑驱动器的名称,...
- 使用`GlobalMemoryStatus`函数获取内存状态信息,并据此计算内存利用率。 #### 扩展知识点 - **系统调用与API**:在Windows系统中,可以通过调用特定的API函数来获取系统信息,如内存状态(`GlobalMemoryStatus`)...
API是由操作系统提供的接口,允许程序员访问底层的功能,如内存管理、用户界面交互和图形输出。在Visual C#中调用API函数可以让我们获取到丰富的系统信息。 **Win16与Win32 API** - **Win16 API**:这是为16位...
类似地,可以声明其他获取系统信息的API,如`GetSystemDirectory`(获取系统目录)、`GetSystemInfo`(获取CPU信息)、`GlobalMemoryStatus`(获取内存状态)和`GetSystemTime`(获取系统时间)。这些函数可能还需要...