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

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

?? 010.txt

?? 會變語言實現的一些程序
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
    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, 65

}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

程序設置了一個定時器,以周期為1秒來刷新當前內存的使用情況,在WM_TIMER消息中用GlobalMemoryStatus獲取內存狀態并用wsprintf將數據轉換成字符串,然后顯示在對話框的IDC_INFO文本框中。

在筆者的計算機中,程序運行的結果如圖10.2所示,計算機的物理內存配置為128 MB,這個數值和物理內存總數(dwTotalPhys字段)符合,dwMemoryLoad字段顯示的72%等于空閑物理內存(dwAvailPhys字段)除以物理內存總數,計算機上當前虛擬內存交換文件大小為192 MB,小于最大限制dwTotalPageFile字段。

在與地址空間相關的數值上,dwTotalVirtual字段的顯示結果是2 147 352 576,等于2 GB減去128 KB,這是因為這2 GB的最低端的和最高端的兩個64 KB是系統保留的(00000000h~0000ffffh,7fff0000h~7fffffffh)。



圖10.2  Meminfo程序的運行結果

Windows可以根據內存使用的需求自動調整交換文件的大小,比如Meminfo程序運行顯示的當前磁盤交換文件可用空間(dwAvailPageFile字段)為168 MB,但是如果嘗試申請一個高達300 MB的內存塊,會發現仍然可以申請成功,這時dwTotalPageFile字段的大小會自動增長到500多MB,把內存塊釋放掉的話,dwTotalPageFile字段會恢復到原來的數值。虛擬內存的使用給我們帶來了很多的方便,我們可以使用超過物理內存好幾倍的內存空間,但是如果所需的內存大大高于物理內存的大小,那么申請內存還是會失敗,因為這會引起物理內存和交換文件之間的數據頻繁交換,大量的磁盤請求將使系統性能降低到沒有實際使用的意義,讀者可以嘗試在128 MB物理內存的計算機上申請一個1 GB的內存塊,即使擁有遠遠大于1 GB的磁盤剩余空間供交換文件使用,也是不會成功的!如果讀者需要使用大大高于物理內存的內存空間,可以嘗試自己進行磁盤交換工作。

10.1.3  標準內存管理函數

標準內存管理函數的功能是在進程的默認堆中申請和釋放內存塊,它由下面一些函數組成:GlobalAlloc,GlobalFree和GlobalReAlloc分別用來申請、釋放和修改內存大小;GlobalLock和GlobalUnlock用來進行鎖定操作;而GlobalDiscard,GlobalFlags,GlobalHandle和GlobalSize等用來丟棄內存或獲取已分配內存的一些信息。

在Win16中,內存管理函數有“全局”或“本地”之分,它們的區別在于返回的指針是遠指針還是近指針,全局內存管理函數名是以“Global”開頭的,而“本地”內存管理函數名是以“Local”開頭的。在Win32中,指針并沒有遠近之分,只有一種32位的指針,但為了保持向下兼容,這些函數名仍然沿用了下來,上面列出的這些函數名都是以“Global”開頭的,同樣,Win32中也存在以“Local”開頭的內存管理函數名,只要這些函數名中的“Global”全部換成“Local”就可以了。這兩組函數在Win32中是完全相同的,讀者可以自由使用名字以Global或Local為前綴的函數。

用標準內存管理函數可以分配的內存有兩種:固定地址的內存塊和可移動的內存塊,而可移動的內存塊又可以進一步定義為可丟棄的,讓我們逐步來討論它們的不同。

1. 固定的內存塊

常規意義上的內存就是固定的內存塊,因為申請到內存后,這塊內存的線性地址是固定不變的。要申請一塊固定的內存,可以使用函數:

invoke  GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,dwBytes

  .if   eax

  mov lpMemory,eax

  .endif

第一個參數是標志,GMEM_FIXED表示申請的是固定的內存塊,GMEM_ZEROINIT表示需要將內存塊中的所有字節預先初始化為0,也可以簡單地使用GPTR標志,它就相當于是GMEM_FIXED or GMEM_ZEROINIT;第2個參數dwBytes指出了需要申請的是以字節為單位的內存大小。如果內存申請失敗,eax中返回NULL,否則返回值是一個指向內存塊起始地址的指針,用戶需要保存這個指針,在使用內存或者釋放內存的時候還要用到它。

如果要釋放一個先前申請的固定內存塊,可以使用GlobalFree函數:

invoke  GlobalFree,lpMemory

如果釋放成功,函數返回NULL,否則函數返回的值就是輸入的lpMemory。程序在不再使用內存塊的時候應該使用這個函數將內存釋放,即使程序在退出的時候忘記了釋放內存,Windows也會自動將它們釋放。

在實際使用中往往需要改變一個內存塊的大小,這時候就要用到GlobalReAlloc函數,這個函數可以縮小或者擴大一塊已經申請到的內存:

invoke GlobalReAlloc,lpMemory,dwBytes,uFlags

.if   e ax

  mov lpNewMemory,eax

.endif

lpMemory是先前申請的內存塊指針,dwBytes是新的大小,如果這個數值比原來申請的時候要小,也就是需要縮小內存塊,那么uFlags標志參數可以是NULL,如果縮小內存塊的操作不成功,那么函數的返回值為0,否則是新的縮小了的內存塊指針,當然,這個指針和原來的指針肯定是一樣的。

但是需要擴大一個內存塊的時候,情況就稍微有些復雜了。讓我們做一個實驗來模擬這樣一種情況:首先申請兩個1000h大小的固定內存塊,得到兩個指針,讀者可以發現第二塊幾乎緊接第一塊內存,一般情況下如果第一塊內存的地址是X,那么第二塊內存的地址幾乎就是X+1000h,如果需要將第一個內存塊擴大到2000h字節,那么只能在別的地方開辟一個2000h大小的內存塊,因為原來位置后面的1000h已經被第二塊內存占用了,這就意味著新的指針可能和原來的不一樣。

  


可以在GlobalReAlloc函數中通過指定不同的uFlags來規定是否允許Windows在必要的時候移動內存塊。當uFlags中有GMEM_MOVEABLE選項的時候,如果需要移動內存塊,Windows會在別的地方開辟一塊新的內存,并把原來內存塊中的內容自動復制到新的內存塊中,這時函數的返回值是新的指針,原來的指針作廢。

如果不指定GMEM_MOVEABLE選項,那么只有當內存塊后面擴展所需的空間沒有被使用時,函數才會執行成功,否則,函數失敗并返回NULL,這時原來的指針繼續有效。

為了保證內存塊擴大成功,建議總是使用下面的語句來擴大和縮小內存:

invoke  GlobalReAlloc,lpMemory,dwBytes,GMEM_ZEROINIT or GMEM_MOVEABLE

.if   eax

    mov lpMemory,eax

  .endif

指定GMEM_ZEROINIT選項可以使內存塊擴大的部分自動被初始化為0,然后程序判斷返回值,如果改變大小成功的話,則用新的指針替換原來的指針,其他和原來指針有關的值也不要忘了同時更新。

2. 可移動的內存塊

可移動的內存塊在不使用的時候允許Windows改變它的線性地址,為什么要使用可移動的內存塊呢?惟一的理由是防止內存的碎片化,這里的碎片化指的是用戶程序自己地址空間的碎片化,而不是指整個操作系統。讀者可能有個疑問:與DOS操作系統相比,Win32用戶程序可用的地址空間要大得多,整整2 GB的地址空間難道還怕用完嗎?讓我們先用一個例子來演示一下,并由此引伸出可移動內存塊的使用方法。

在這個例子中,讓我們來設計一個“陰謀”,用一個極端的方法“謀殺”掉所有的地址空間:程序首先申請一個1 MB大小的固定內存塊,然后繼續申請內存并把前面申請的內存塊大小改為100 B,由此循環,因為縮小內存塊釋放出來的空間大小為999 900 B,新申請的內存塊無法使用這些地址空間,只能繼續使用后面大塊的地址空間,如果沒有算錯的話,經過2 000次左右的循環就會把全部的地址空間分割成2 000個999 900 B大小的空間(2GB等于2 000個1 MB),到時候雖然只保留了近200 KB大小的內存(2 000個100 B),但是這2 000個100 B均勻分布在2 GB的地址空間內,以至于接下來任何大于999 900 B的內存申請操作都無法成功。

這個程序位于所附光盤的Chapter10\Fragment目錄內,Fragment.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_MEMORY    equ     101

IDC_COUNT   equ     102

IDC_INFO     equ   103

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

; 數據段

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

    .data?

hInstance   dd    ?

hWinMain     dd    ?

dwTotalMemory dd    ?

dwCount   dd    ?

ifCanQuit   dd    ?

    .const

szInfo   db   ~無法繼續申請 1MB 大小的內存!~,0

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

; 代碼段

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

    .code

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

_ProcThread   proc     uses ebx ecx edx esi edi,lParam

    local @lpLastMem

 

    invoke  GlobalAlloc,GPTR,1000000

    mov   @lpLastMem,eax

    inc   dwCount

    add   dwTotalMemory,1000000

    .repeat

    push     @lpLastMem

    invoke  GlobalAlloc,GPTR,1000000

    mov   @lpLastMem,eax

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看日韩av先锋影音电影院| 成人av先锋影音| 一区二区在线看| 国产精品国产a| 国产免费久久精品| 中文字幕精品在线不卡| 国产精品国产三级国产三级人妇| 久久美女高清视频| 国产精品福利av| 亚洲视频在线一区二区| 亚洲制服丝袜在线| 日本伊人精品一区二区三区观看方式 | 精品国产乱码久久久久久久| 91久久精品日日躁夜夜躁欧美| 色综合色综合色综合色综合色综合 | 亚洲免费av高清| 一区二区三区在线高清| 五月婷婷欧美视频| 久久国产精品99精品国产| 男男视频亚洲欧美| 国产v综合v亚洲欧| 91美女在线看| 欧美一区二区视频在线观看2022 | 欧美自拍偷拍午夜视频| 欧美日韩中字一区| 欧美精品一区二区三区四区| 久久精品免视看| 亚洲一区二区欧美激情| 黄色资源网久久资源365| hitomi一区二区三区精品| 色婷婷精品久久二区二区蜜臂av | 日本免费在线视频不卡一不卡二| 毛片一区二区三区| 99久久综合国产精品| 欧美精品日韩一区| 国产日韩欧美精品在线| 香蕉av福利精品导航| 国产在线一区二区综合免费视频| 96av麻豆蜜桃一区二区| 日韩欧美一级在线播放| 亚洲人一二三区| 韩国理伦片一区二区三区在线播放| 91小视频免费观看| 久久亚洲综合色| 日韩和欧美一区二区| 成人开心网精品视频| 91麻豆精品国产91久久久久久| 国产亚洲制服色| 麻豆久久一区二区| 欧美最猛黑人xxxxx猛交| 国产精品欧美一区二区三区| 久久机这里只有精品| 欧美伊人久久大香线蕉综合69| 中文av一区特黄| 国产在线精品一区二区不卡了| 精品1区2区3区| 亚洲欧洲www| 成人丝袜视频网| xnxx国产精品| 久久精品国产一区二区三区免费看| 在线观看亚洲一区| 亚洲日本成人在线观看| 成人免费视频免费观看| 国产婷婷色一区二区三区| 久久av中文字幕片| 日韩欧美国产wwwww| 亚洲va韩国va欧美va精品| 日本久久精品电影| 亚洲色图丝袜美腿| av影院午夜一区| 国产丝袜美腿一区二区三区| 九九在线精品视频| 精品国产污网站| 免费成人结看片| 欧美大片在线观看一区二区| 麻豆高清免费国产一区| 欧美刺激午夜性久久久久久久| 日韩va欧美va亚洲va久久| 91精品国产全国免费观看| 蜜臀av一级做a爰片久久| 欧美老年两性高潮| 久久成人av少妇免费| 久久欧美一区二区| eeuss鲁片一区二区三区在线看| 欧美激情一区二区三区在线| 91在线你懂得| 亚洲成av人片在线| 精品国产一区二区三区忘忧草| 韩国av一区二区三区在线观看| 欧美国产精品久久| 色老头久久综合| 午夜欧美电影在线观看| 欧美电影精品一区二区| 高清国产午夜精品久久久久久| 国产精品久久久久久久午夜片| 91国产免费看| 麻豆成人在线观看| 国产精品乱码久久久久久| 91久久精品日日躁夜夜躁欧美| 日韩av电影天堂| 国产日韩精品视频一区| 91亚洲精品一区二区乱码| 一个色综合av| 26uuu国产电影一区二区| 91麻豆国产自产在线观看| 视频一区免费在线观看| 久久精品免费在线观看| 欧美在线啊v一区| 国产精品综合一区二区三区| 亚洲精品亚洲人成人网在线播放| 日韩一区二区电影| 99久久精品免费看国产免费软件| 午夜久久久久久| 国产精品久久久久久久裸模| 日韩一区二区免费在线电影| eeuss影院一区二区三区| 日日摸夜夜添夜夜添国产精品| 久久久久国产精品免费免费搜索| 欧美日韩免费电影| av电影在线观看完整版一区二区| 日韩电影免费一区| 亚洲男帅同性gay1069| 久久久久久久久久美女| 欧美日韩亚洲另类| 一本色道久久综合亚洲91 | 99精品久久只有精品| 男人操女人的视频在线观看欧美 | 欧美日韩性生活| 国产精品1区2区3区在线观看| 亚洲激情在线播放| 亚洲欧美综合另类在线卡通| 久久久久国产精品人| 日韩欧美一区二区免费| 91精品在线一区二区| 91久久国产最好的精华液| 成人avav在线| 成人性生交大合| 国产乱国产乱300精品| 久久电影国产免费久久电影| 日本少妇一区二区| 五月天中文字幕一区二区| 一区二区三区欧美激情| 亚洲色图丝袜美腿| 中文字幕一区二区不卡| 欧美国产乱子伦| 国产女主播在线一区二区| 精品国产一区二区三区av性色| 日韩精品中文字幕一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | zzijzzij亚洲日本少妇熟睡| 国产在线播放一区| 激情六月婷婷综合| 精品一区二区三区的国产在线播放| 亚洲综合免费观看高清完整版 | 艳妇臀荡乳欲伦亚洲一区| 国产免费观看久久| 国产精品白丝在线| 亚洲精品日韩综合观看成人91| 国产精品久久久久婷婷| 亚洲精品成人a在线观看| 亚洲一卡二卡三卡四卡无卡久久| 亚洲色图视频网站| 一区二区三区精品视频| 亚洲成av人片在线| 免费人成网站在线观看欧美高清| 六月婷婷色综合| 成人自拍视频在线| 一本色道a无线码一区v| 欧美日韩激情一区二区| 欧美va亚洲va国产综合| 中文字幕欧美激情| 亚洲影院在线观看| 久久成人免费日本黄色| 国产精一品亚洲二区在线视频| 成人免费av在线| 欧美日韩一区二区三区免费看 | 中文字幕av一区二区三区| 久久久亚洲午夜电影| 国产精品久久99| 日韩av电影天堂| 丁香六月久久综合狠狠色| 欧美亚洲国产一区在线观看网站 | 成人教育av在线| 欧美在线制服丝袜| 日韩欧美久久一区| 自拍av一区二区三区| 日产国产欧美视频一区精品| 国产凹凸在线观看一区二区| 日本精品裸体写真集在线观看| 日韩精品一区二区三区中文不卡 | 亚洲日本韩国一区| 日韩精品一二三区| 国产一区二区毛片| 欧美性videosxxxxx| 精品国精品自拍自在线| 亚洲一级在线观看| jizzjizzjizz欧美| 久久久美女艺术照精彩视频福利播放| 亚洲一区二区三区中文字幕| 国产黄人亚洲片|