亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 010.txt

?? 會變語言實現的一些程序
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
 10.1 內 存 管 理

10.1.1  內存管理基礎 
Win32中的內存管理是分層次的,系統提供了幾組層次不同的函數來管理內存,它們是標準內存管理函數、堆管理函數、虛擬內存管理函數和內存映射文件函數。所有的這些函數都是為了讓用戶能在比較高的層次上方便地管理內存,以便將程序和底層的內存分頁機制隔離開來。如圖10.1所示,這幾組函數的層次是各不相同的。



圖10.1  Windows的內存分層管理

Windows使用一個以頁為基礎的虛擬內存系統,與分頁有關的概念已經在第1章的1.3.2小節中有所介紹。Windows充分利用了80x86處理器保護模式下的線性尋址機制和分頁機制,這些機制是Win32內存管理的基礎,Win32提供了一組虛擬內存管理函數來管理虛擬內存,主要用于保留/提交/釋放虛擬內存,在虛擬內存頁上改變保護方式,鎖定虛擬內存頁以及查詢一個進程的虛擬內存等操作,這是一組位于底層的函數。

堆管理函數相對比較高級一點,堆的主要功能就是有效地管理內存和進程的地址空間。DOS操作系統下的C語言中就已經有了“堆”的概念,這時的“堆”是程序初始化時向操作系統申請并預留的大塊內存,程序通過C函數在這塊空間中申請和釋放內存。

在Win32中,進程可以使用的整個地址空間就是一個堆。并且“堆”的概念又被引伸了一步:Win32中分兩種堆,一種是進程的“默認堆”,默認堆只有一個,指的就是可以使用的整個地址空間;另一種是“動態堆”,也稱為“私有堆”,私有堆類似于DOS下C語言中使用的那種堆,一個進程可以隨意建立多個私有堆,也可以隨意將它們釋放,私有堆全部位于默認堆中,從概念上看,它和默認堆并沒有什么不同,就像一個跨國公司和屬下的子公司同樣都是按照公司的規程操作一樣。使用堆管理函數可以對所有的私有堆和默認堆進行操作。

標準內存管理函數總是在默認堆中分配和釋放內存,這組函數就是常規意義上的內存管理函數。

內存映射文件函數相對比較獨立,它是為了文件操作的方便性而設立的,當對文件進行操作的時候,一般總是先打開文件,然后申請一塊內存用做緩沖區,再將文件數據循環讀入并處理,當文件長度大于緩沖區長度的時候需要多次讀入,每次讀入后處理緩沖區邊界位置的數據往往是個麻煩的問題。曾經介紹過Windows可以使用磁盤文件當做虛擬內存(參考圖1.5,虛擬內存的實現),內存映射文件函數使用同樣的辦法將一個文件直接映射到進程的地址空間中,這樣可以通過內存指針用讀寫內存的辦法直接存取文件內容。

對比這些函數,可以發現它們涉及的系統資源是各不相同的,如表10.1所示。

表10.1  不同內存管理函數的操作對象

內存管理函數
 涉 及 方 面
 
標準內存管理函數
 一個進程的默認堆
 
堆管理函數
 一個進程的虛擬地址空間、系統內存、進程堆資源結構
 
虛擬內存管理函數
 一個進程的虛擬地址空間、系統頁文件、系統內存、硬盤空間
 
內存映射文件函數
 一個進程的虛擬地址空間、系統頁文件、系統內存、硬盤空間、標準文件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字段返回的是交換文件的最大值,并不是當前實際建立的交換文件的大小,一般當前的交換文件大小會小于這個數值,但這個數值的大小也不是確定的,如果需要的話,系統會增加它的大小直到不再有空余的磁盤空間放置交換文件為止。

在所附光盤的Chapter10\MemInfo目錄中的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

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 數據段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

  .data?

hInstance dd    ?

hWinMain dd   ?

 

.const

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

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代碼段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

    .code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色呦呦一区二区三区| 国产伦精品一区二区三区免费迷| 精品国产伦一区二区三区观看体验 | 欧美日韩成人综合在线一区二区 | 日韩av电影天堂| 午夜久久久久久电影| 日本中文字幕一区二区视频| 午夜电影网亚洲视频| 秋霞午夜av一区二区三区| 日产精品久久久久久久性色| 麻豆精品久久久| 国产一区二区三区观看| 高清在线不卡av| 色综合久久综合网97色综合| 日本乱码高清不卡字幕| 欧美人与性动xxxx| 精品国产污网站| 中文字幕在线不卡国产视频| 一区二区成人在线| 久久精品国产一区二区| 成人av资源站| 欧美日韩国产电影| 国产女同互慰高潮91漫画| 亚洲欧美综合色| 丝袜诱惑亚洲看片| 国产精品综合视频| 在线观看免费一区| 精品粉嫩超白一线天av| 成人欧美一区二区三区1314| 亚洲第一激情av| 国产麻豆精品在线观看| 91国产成人在线| 2022国产精品视频| 一区二区三区中文字幕精品精品| 日韩av电影免费观看高清完整版 | 久久亚洲精品小早川怜子| 亚洲欧洲日韩在线| 久久精品99国产国产精| 成人sese在线| 精品国产一区二区在线观看| 亚洲人成伊人成综合网小说| 久久se这里有精品| 一本一道久久a久久精品| 精品理论电影在线观看| 亚洲永久免费av| 成人app网站| 精品国产一区久久| 日韩精品一卡二卡三卡四卡无卡| 成人福利视频在线看| 日韩美女主播在线视频一区二区三区 | 欧美日韩你懂得| 日韩一区在线看| 国内精品视频一区二区三区八戒| 色婷婷精品大视频在线蜜桃视频| 精品国产乱码久久久久久牛牛| 亚洲香肠在线观看| 91蜜桃网址入口| 久久久99精品久久| 麻豆91在线播放| 欧美日韩视频一区二区| 亚洲精品国产a| 色94色欧美sute亚洲线路二| 中文字幕第一区第二区| 国内外成人在线| 欧美精品一区二区三| 久久99热这里只有精品| 日韩一区二区在线免费观看| 日韩中文字幕区一区有砖一区| 色婷婷精品大在线视频| 一区二区在线观看视频| 色综合婷婷久久| 自拍偷自拍亚洲精品播放| 不卡的看片网站| 国产精品国产自产拍高清av | 国产精品1区2区3区在线观看| 91精品国产品国语在线不卡| 日韩精品免费专区| 日韩一卡二卡三卡| 国产精品一二三区在线| 日本一区二区综合亚洲| 成人免费的视频| 亚洲人成网站色在线观看| 91在线观看地址| 亚洲愉拍自拍另类高清精品| 欧美日韩大陆一区二区| 日韩成人一级片| 久久久久久久免费视频了| 成人av在线观| 一级精品视频在线观看宜春院 | 成人毛片视频在线观看| 国产精品乱子久久久久| 91麻豆自制传媒国产之光| 亚洲一区在线观看视频| 91精品啪在线观看国产60岁| 久久国产免费看| 国产三级精品三级在线专区| av一二三不卡影片| 亚洲123区在线观看| 精品国产污污免费网站入口| 白白色亚洲国产精品| 亚洲图片欧美一区| 精品国产不卡一区二区三区| 成人黄色a**站在线观看| 亚洲影视在线播放| 久久综合给合久久狠狠狠97色69| 不卡高清视频专区| 免费看欧美女人艹b| 中文字幕色av一区二区三区| 欧美日韩亚洲另类| 大美女一区二区三区| 亚洲综合999| 亚洲精品一区在线观看| 在线一区二区三区| 国产综合色在线| 亚洲国产aⅴ成人精品无吗| 日韩欧美一级在线播放| 99国内精品久久| 精品在线一区二区| 一区二区三区不卡在线观看| 2022国产精品视频| 欧美一区二区三区不卡| 色婷婷精品大视频在线蜜桃视频| 国产麻豆视频一区| 免费成人在线网站| 亚洲一区二区3| 国产精品网站导航| 久久嫩草精品久久久久| 91麻豆精品久久久久蜜臀 | 欧美嫩在线观看| 不卡的av在线| 国产精品一区二区在线看| 日韩精品欧美成人高清一区二区| 亚洲欧美视频在线观看视频| 久久久久久99精品| 日韩一级大片在线观看| 91成人在线精品| av在线这里只有精品| 国产成人精品亚洲日本在线桃色| 美国毛片一区二区| 香蕉久久一区二区不卡无毒影院| 亚洲精品少妇30p| 综合中文字幕亚洲| 成人免费视频在线观看| 国产喷白浆一区二区三区| 精品人在线二区三区| 日韩欧美第一区| 日韩欧美国产精品| 欧美大黄免费观看| 日韩精品在线看片z| 日韩美一区二区三区| 日韩三区在线观看| 精品国产一区二区三区av性色| 欧美一卡二卡在线观看| 91精品国产入口在线| 日韩欧美资源站| 欧美一区二区三区成人| 欧美sm美女调教| 久久久久久久久伊人| 国产精品无人区| 亚洲黄网站在线观看| 亚洲最大成人网4388xx| 午夜精品福利久久久| 捆绑变态av一区二区三区| 免费av网站大全久久| 久久99精品国产麻豆婷婷| 国产一二精品视频| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 99视频在线精品| 91色porny蝌蚪| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩国产免费| 日韩欧美视频一区| 国产亚洲视频系列| 亚洲同性同志一二三专区| 亚洲综合小说图片| 精品亚洲porn| 成人h动漫精品一区二| 欧美中文字幕一区| www日韩大片| 亚洲欧美综合色| 美女看a上一区| 成人免费电影视频| 欧美日韩国产成人在线91 | 99热99精品| 欧洲一区二区av| 久久久五月婷婷| 一区二区三区久久久| 久久国产精品第一页| av在线不卡网| 日韩一区二区三区四区五区六区| 久久久久久一二三区| 亚洲综合在线免费观看| 麻豆91免费看| 欧美中文字幕一区二区三区| 日韩情涩欧美日韩视频| 亚洲黄色录像片| 国产麻豆精品theporn| 欧美日韩免费视频| 国产精品狼人久久影院观看方式| 日本 国产 欧美色综合|