友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
荣耀电子书 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

windows环境下32位汇编语言程序设计-第章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



 
内存映射文件函数
 一个进程的虚拟地址空间、系统页文件、系统内存、硬盘空间、标准文件I/O
 

10。1。2  内存的当前状态

在第1章中已经介绍过,一个进程可以寻址的地址空间是4 GB,但用户可以直接管理的地址空间是多大呢?实际上,高端的2 GB是供操作系统内核使用的,其中安排了操作系统的代码和数据(Windows 9x中还包括共享内存映射的地址空间),可供应用程序使用的地址空间是低端的2 GB,这2 GB除去应用程序与用户DLL等的代码和静态数据段以后,余下来的才是内存管理函数可以使用的地址空间,应用程序和用户DLL的大小一般只有几兆字节到上百兆字节,所以可以认为能自由使用的地址空间基本上是2 GB。

既然用户可以使用的地址空间大概为2 GB,读者千万不要认为就可以申请2 GB的内存了,因为这2 GB仅是可以使用的“地址”空间,而不是可以使用的“内存”空间,可分配内存的大小还受制于物理内存和磁盘交换文件的大小。因为物理内存和磁盘交换文件是供整个系统和所有用户程序使用的,所有系统内核、当前执行的所有用户程序的代码、数据以及分配的内存总量并不能超过物理内存和磁盘交换文件的总和。

当设计一个可能需要申请大量内存的程序时,如何预先得知系统的配置情况呢?对此可以使用GlobalMemoryStatus函数:

 

    invoke  GlobalMemoryStatus,lpBuffer

lpBuffer指向一个MEMORYSTATUS结构,结构的定义如下:

MEMORYSTATUS STRUCT

  dwLength            DWORD      ?     ;本结构的长度

  dwMemoryLoad      DWORD      ?     ;已用内存的百分比

  dwTotalPhys       DWORD      ?     ;物理内存总量

  dwAvailPhys       DWORD      ?     ;可用物理内存

  dwTotalPageFile   DWORD      ?     ;交换文件总的大小

  dwAvailPageFile   DWORD      ?     ;交换文件中空闲部分大小

  dwTotalVirtual    DWORD      ?     ;用户可用的地址空间

  dwAvailVirtual    DWORD      ?     ;当前空闲的地址空间

MEMORYSTATUS ENDS

在调用之前需要首先将dwLength字段设置为MEMORYSTATUS结构的长度,当调用GlobalMemoryStatus函数后,函数会在结构中返回对应的数值。注意:dwTotalPageFile字段返回的是交换文件的最大值,并不是当前实际建立的交换文件的大小,一般当前的交换文件大小会小于这个数值,但这个数值的大小也不是确定的,如果需要的话,系统会增加它的大小直到不再有空余的磁盘空间放置交换文件为止。

在所附光盘的Chapter10MemInfo目录中的MemInfo。asm文件利用这个功能定时获取并显示当前内存的使用信息,源代码如下:

                    。386

                    。model flat; stdcall

                    option casemap :none

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; Include 文件定义

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

include         windows。inc

include         user32。inc

includelib      user32。lib

include         kernel32。inc

includelib      kernel32。lib

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; Equ 等值定义

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_MAIN            equ     1000

DLG_MAIN            equ     100

IDC_INFO            equ         101

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 数据段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第10章 内存管理和文件操作


10。1 内 存 管 理(2)

    
                。data?

hInstance       dd      ?

hWinMain         dd     ?

 

                 nst

szInfo           db     '物理内存总数     %lu 字节';0dh;0ah

                 db     '空闲物理内存     %lu 字节';0dh;0ah

                 db     '虚拟内存总数     %lu 字节';0dh;0ah

                 db     '空闲虚拟内存     %lu 字节';0dh;0ah

                 db     '已用内存比例     %d%%';0dh;0ah

                 db     '————————————————';0dh;0ah

                 db     '用户地址空间总数 %lu 字节';0dh;0ah

                 db     '用户可用地址空间 %lu 字节';0dh;0ah;0

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

; 代码段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

 

                    de

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_GetMemInfo     proc

                    local   @stMemInfo:MEMORYSTATUS

                    local   @szBuffer'1024':byte

 

                    mov     @stMemInfo。dwLength;sizeof @stMemInfo

                    invoke  GlobalMemoryStatus;addr @stMemInfo

                    invoke  wsprintf;addr @szBuffer;addr szInfo;

                            @stMemInfo。dwTotalPhys;@stMemInfo。dwAvailPhys;

                            @stMemInfo。dwTotalPageFile;

                            @stMemInfo。dwAvailPageFile;

                            @stMemInfo。dwMemoryLoad;

                            @stMemInfo。dwTotalVirtual;@stMemInfo。dwAvailVirtual

                    invoke  SetDlgItemText;hWinMain;IDC_INFO;addr @szBuffer

                    ret

 

_GetMemInfo     endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

_ProcDlgMain        proc        uses ebx edi esi hWnd;wMsg;wParam;lParam

 

                    mov     eax;wMsg

                    。if     eax   WM_TIMER

                            call        _GetMemInfo

                    。elseif eax   WM_CLOSE

                            invoke  KillTimer;hWnd;1

                            invoke  EndDialog;hWnd;NULL

;********************************************************************

                。elseif eax   WM_INITDIALOG

                        push        hWnd

                        pop     hWinMain

                        invoke  LoadIcon;hInstance;ICO_MAIN

                        invoke  SendMessage;hWnd;WM_SETICON;ICON_BIG;eax

                        invoke  SetTimer;hWnd;1;1000;NULL

                        call        _GetMemInfo

;********************************************************************

                。else

                        mov     eax;FALSE

                        ret

                。endif

                mov     eax;TRUE

                ret

 

_ProcDlgMain    endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

start:

                invoke  GetModuleHandle;NULL

                mov     hInstance;eax

                invoke  DialogBoxParam;hInstance;DLG_MAIN;NULL;

                        offset _ProcDlgMain;NULL

                invoke  ExitProcess;NULL

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                end     start

MemInfo。rc文件如下:

 

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#include            

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define ICO_MAIN                1000

#define DLG_MAIN                100

#define IDC_INFO                101

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_MAIN        ICON                〃Main。ico〃

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

DLG_MAIN DIALOG 188; 193; 140; 75

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION 〃内存状态〃

FONT 9; 〃宋体〃



 LTEXT 〃〃; IDC_INFO; 6; 6; 135
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!