也就是不會你裝中/高階卡上有512M,然後抓主記憶體512M 湊成1G,
不過低階卡確實會有128M抓主記憶體128M,湊成256M,
但是這是從你的3.XG 之內扣的.
而更低階的非獨立顯卡所使用的顯示記憶體是進OS前就扣掉的,
通常與3.XG無關(當然用太多,就不會是3.XG,可能是2.XG了).
2."32BITS OS只能抓到4G" 這是錯的,錯很大.
但32BITS XP/VISTA 只能抓到4G 這是對的.是M$故意搞的.
32BITS OS 不等於 32BITS XP/VISTA,
因為XP/VISTA只是OS的一種,
而且經過一些手腳之後, VISTA 可以抓到128G ,不需要使用 G-RAMDISK等
以前面in2002兄的例子來說,獨立顯卡跟作業系統註冊分享了2811MB的記憶體,而獨立的顯示記憶體總量為1024MB,因此總可用圖形記憶體總量為2811+1024=3835MB,請注意這2811MB的記憶體只是預先跟作業系統註冊、必要時才會動用的,由於獨立顯示記憶體有1024MB,動用到這2811MB的機率很小,即使動用到了,也不會耗用太多。
從2811MB的分享記憶體反向推算,2811*2+512=6134MB,可知in2002兄的系統有6GB的記憶體,安裝了64位元的Vista。
如果是沒有獨立顯示記憶體的低階顯卡,所需的基本視訊記憶體(開機時要看到畫面就需要視訊記憶體了)是在電腦開機時、早在作業系統載入之前就透過BIOS去要記憶體了,由於微軟的消費性32位元作業系統只能管到4GB的實體定址位址,因此有些BIOS設計了Above 4GB或Below 4GB的選項,讓基本所需的視訊記憶體可以從32位元消費性Windows鬧彆扭不去管的記憶體中分配以善加利用,但是若用了Gavotte RAMdisk也去把Windows鬧彆扭不去管的記憶體作成RAMdisk,由於各自進行各自的above 4GB管理,不知道對方的存在,會造成衝突。
另外Intel/AMD架構下的32位元作業系統,所能管理的記憶體總量絕不能用2^32=4GB這種計概數學來算,16位元的DOS可以管理1MB的定址空間,並不是只有2^16=64KB,基於16位元80286的初版OS/2可以管理16MB,也不是2^16=64KB。
WinXP跟Vista 32只能管理到4GB定址空間,是由於微軟的封印,不是天生的限制,甚至這個封印,也已經有強者找出移除的方式了。
scsi wrote:
32位元的CPU只能定址到4G
這也還有毛病.
因為定址模式有很多.
並非單純的32位元的CPU只能定址到4G.
不過實體定址能力還是要看拉了多少條地址線.
因為現在大多數人的 32/64 bits 的x64 CPU,
都不只 32條地址線.
也並非64bits cpu就拉足64條地址線,
基本上,地址線與cpu是幾位元也不一定有關係.
scsi wrote:
單process記憶體使用仍然是無法突破4G
老實說,這也還有毛病啦.
但是就windows 系列os 來說,是對的.
對單一執行緒分配多少記憶體是OS決定的.
不管你是裝 64M,128M,256M,512M,1G,2G,3G,.......
如果沒有設 /3GB,
一般的執行緒只會拿到 2G的空間.
用了/3GB就可以拿到3G,
不過這也還有使用限制.
以後會不會跌破眼就就難說了.
====
趕快去GOOGLE吧,
不然翻翻舊文也可以.
scsi wrote:
PAE也不是全能的,單process記憶體使用仍然是無法突破4G
這就是32位元的限制了
...(恕刪)
建議說法再清楚一些,PAE跟64位元都不是全能的,如果是32位元的程式,不管跑在32位元或64位元作業系統下,都有程式的user mode虛擬空間預設等於2GB的限制[*註]。
如果改寫成64位元原生的程式,當然就沒這個問題,不過一方面改寫的誘因對於大多數商業軟體來說並不大,由於64位元Windows兼容32位元程式執行環境,而開發64位元原生程式版本卻只能賣給64位元Windows使用者,不像開發32位元版本,可以賣給32/64位元Windows使用者,在64位元Windows市佔率仍顯著低於32位元Windows的現在,這是個雞生蛋、蛋生雞問題。
再者2GB user mode虛擬空間其實也不算小,對於九成九以上的程式應用及程式設計師來說,已經夠用了(除了一些科學運算、資料庫應用、圖形設計應用....之外),並不像當年DOS的1MB限制,已經對九成以上的程式設計師跟使用者造成極大不便。
[*註] 之所以說預設,是因為32位元程式本身若設定了IMAGE_FILE_LARGE_ADDRESS_AWARE,在64位元作業系統下user mode虛擬空間可到4GB,而32位元作業系統若設定了syntech兄提到的/3GB選項,user mode虛擬空間最高可到3GB。
fzr0202 wrote:
我想我說的沒有錯吧...
還是錯在哪?
另外,有人能解釋一下128G是哪種定址方式出來的?....(恕刪)
2^32這個算數適用的地方是在每個process執行時獨有的"虛擬"定址空間的大小,不過在您提到這個算式之前一直都是在談作業系統管理的"實體"記憶體跟實體位址的對應,這時2^32是不適用的。
128GB的解釋:
http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm
================================================================
The maximum physical address is calculated as the least of three values: a license limit; a run-time limit; and a hard-coded limit.
For the ordinary kernel, the license value for the maximum physical address is the same as for the total amount of memory, but the PAE kernel has a separate license value, namely Kernel-MaxPhysicalPage. Again, the data for this value is a number of MB. Again, all 32-bit editions of Windows Vista are installed with this value set to 0x1000, representing 4GB.
The run-time limit arises from needing to be sure that an array of MMPFN structures can be set up to represent all the pages of physical memory, one structure per 4KB page, from zero up to the maximum physical address. The kernel’s capacity for such an array depends on how much of the linear address space is already in use. If the size of the largest block of free linear address space divided by the size of an MMPFN structure (0x18 or 0x1C bytes for the ordinary and PAE kernels, respectively) is greater than the maximum physical page determined from the license value, then the licensed maximum certainly cannot be supported and the maximum has to be reduced accordingly.
The preceding calculation also produces an architectural limit on the use of physical memory by 32-bit Windows with a PAE kernel. The largest block of linear address space that is available even this early cannot be as large as 1GB and could be much smaller. Even if it is very nearly 1GB, that’s only enough to fit an MMPFN array for a maximum physical address of 128GB (given that the maximum should be a power of two). This limit is hard-coded in the PAE kernel, as is 4GB for the non-PAE kernel.
================================================================
1GB/28bytes = 38347922個MMPFN entry (Windows採用4KB分頁,而作業系統會為每個4KB分頁維護一個MMPFN的資料結構,每個MMPFN結構大小為28bytes)
38347922*4KB ~= 146GB (理論上作業系統若分配最多1GB來放MMPFN資料結構時,所能夠管理的實體記憶體上限)
146GB rounded to the nearest power of two = 128GB(實務上作業系統所能管理的最大實體記憶體上限值,大都是2的冪次方,以便於運算,而最接近146GB的2冪次方為128GB,此時MMPFN資料結構需耗用0.875GB的記憶體)