線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1909
推到 Plurk!
推到 Facebook!

使用GlobalMemoryStatus API的問題

尚未結案
ivanxyz
一般會員


發表:7
回覆:10
積分:3
註冊:2004-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-20 16:11:03 IP:210.202.xxx.xxx 未訂閱
請敎各位高手,我用GlobalMemoryStatus讀出來的virtual memory跟我用XP 的系統資訊顯示的值不一樣,是要用其它方法嗎?有那位高手可以幫幫忙
ivanxyz
一般會員


發表:7
回覆:10
積分:3
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-21 09:32:28 IP:210.202.xxx.xxx 未訂閱
已經找到問題了,我在XP SP1看到的virtual memory 是physical memory 加上 page file的容量,但是在XP SP2上看到的卻又是GlobalMemoryStaus提供的 virtual memory 真不知道為什麼會這樣?
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-21 10:25:40 IP:220.130.xxx.xxx 未訂閱
ivanxyz:    VirtualAlloc原型為 PVOID VirtualAlloc(PVOID pvAddress,SIZE_T dwSize,DOWRD fdwAllocationType,DWORD fdwProtect) pvAddress->你想要Reserving的起始位址 swSize->需要配置的大小bytes(必須是Page Size的整數倍) fdwAllocationType MEM_COMIT->實際的配置記憶體 MEM_RESERVE->保留一塊記憶體 fdwProtect->設定存取權限 若想要直接指定起始位址的話要必須先Reserving,在COMMIT. 範例如下: PVOID buffer=VirtualAlloc((LPVOID)0x003c0000, 64*1024,MEM_RESERVE, PAGE_READWRITE);//Reserving buffer=VirtualAlloc((LPVOID)0x003c0000,64*1024,MEM_COMMIT, PAGE_READWRITE); //COMMIT 發表人 - 李國維 於 2005/01/21 10:34:05
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-21 10:57:14 IP:220.139.xxx.xxx 未訂閱
參考: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/memorystatus_str.asp
引言: dwTotalPageFile Size of the committed memory limit, in bytes. dwAvailPageFile Size of available memory to commit, in bytes. dwTotalVirtual Total size of the user mode portion of the virtual address space of the calling process, in bytes. dwAvailVirtual Size of unreserved and uncommitted memory in the user mode portion of the virtual address space of the calling process, in bytes.
StatPlus 系統資源監測器 也是使用相同的 API 來取得記憶體資訊。 另外,請參考這篇 anpino 大大精彩解說: ■【問題】實體記憶體變少了 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52293 吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC61131-3 GeeXboX 媒體播放器
------
http://www.ViewMove.com
ivanxyz
一般會員


發表:7
回覆:10
積分:3
註冊:2004-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-21 12:15:40 IP:210.202.xxx.xxx 未訂閱
謝謝二位的回答,可是跟我想知道的有點不一樣,在附屬應用程式>系統工具> 系統資訊這一個tool會有virtual memory total size的資訊,跟我在XP sp1中用 GlobalMemoryStatus去讀出來的是不一致的,發現系統資訊的是由api的 dwTotalPageFile +dwTotalPhys,但是到XP SP2系統資訊的值卻又是用 GlobalMemoryStatus所提供的dwTotalVirtual,那問題是到底那一個才是 真的virtual memory的total size?< > 不知道有沒有了解我的意思< >
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-21 12:46:23 IP:220.139.xxx.xxx 未訂閱
有什麼差別呢? 這都是 MS 提供的工具/API,在不同的系統有不同的行為 是很有可能的,而以這篇 anpino 大大精彩解說: ■【問題】實體記憶體變少了  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52293 基本上連「工作管理員」提供的資料也只是參考而已, 以虛擬記憶體來說,是您的程式可以 Allocate 記憶體的大小, 您的程式需要很多的記憶體才跑得動嗎? 如果不是,根本不必去再在可用的虛擬記憶體大小。 程式要跑得順暢,要在意的是實體記憶體夠不夠大, 是否有其他的程式會一直占用實體記憶體,導致自己的程式 被系統由實體記憶體移回 Page File,使得自己的程式反應變慢(因為要從 Page File 載回實體記憶體再執行)。 就如同我所推薦的那篇所說的,
引言: 最後似乎問題只在於, 我拿了一把官方的尺,去量長度, 但是那個官方的尺沒有人驗證過, 連官方自己都沒有保證它量得準!! 感謝大家參與討論,謝謝。 特別感謝 anpino 版主告訴我,這把官方的尺是不準的, 在此之前,我一直以為它是準的 < face="Verdana, Arial, Helvetica"> 所以,如果官方自己都沒有辦法保證,那所有的工具/API的數值也只能參考而已。 吃軟也吃硬 dllee.ktop.com.tw StatPlus 系統資源監測器 @ KTOP OpenPLC - IEC61131-3 GeeXboX 媒體播放器
------
http://www.ViewMove.com
系統時間:2024-04-27 19:10:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!