地址重定位 計算機處理器有32位地址,它的虛擬地址空間有多少字節(jié),怎么計算的?
計算機處理器有32位地址,它的虛擬地址空間有多少字節(jié),怎么計算的?內(nèi)存模塊可以有很大的G空間。但是因為寄存器只有32位,所以可以表示的數(shù)字只有2的32次方,我們的進程是在操作系統(tǒng)抽象的虛擬內(nèi)存中運行的
計算機處理器有32位地址,它的虛擬地址空間有多少字節(jié),怎么計算的?
內(nèi)存模塊可以有很大的G空間。但是因為寄存器只有32位,所以可以表示的數(shù)字只有2的32次方,我們的進程是在操作系統(tǒng)抽象的虛擬內(nèi)存中運行的。虛擬內(nèi)存是一個字節(jié)數(shù)組,每個字節(jié)都有一個地址,地址只有2的32次方,當(dāng)虛擬內(nèi)存滿時,地址只有2的32次方,所以可用內(nèi)存只有4G,這是一個字節(jié)。支持64位字長機,配備32位操作系統(tǒng),不管你的內(nèi)存是8,應(yīng)該是16g,最多只能用4G。所以在32位操作系統(tǒng)上,不管你加多少內(nèi)存,都只有4G。Intel x86系列機器從16位、32位到64位現(xiàn)在,機器的功能越來越強大。這個數(shù)字是指機器的字長、系統(tǒng)總線每次傳輸?shù)臄?shù)據(jù)單元、程序計數(shù)器的長度和寄存器的長度。如果程序計數(shù)器的長度是32位,那么執(zhí)行指令的地址空間即虛擬內(nèi)存空間只有4G,Windows中的虛擬內(nèi)存是指在硬盤上創(chuàng)建一個文件,用于放置非活動內(nèi)存數(shù)據(jù)或交換數(shù)據(jù)(如何放置和放置多少由操作系統(tǒng)決定)。
2. 虛擬地址空間是指windows下每個進程的私有內(nèi)存空間。大小為4G,可訪問空間小于2G,其余由系統(tǒng)預(yù)留。這個2G是可訪問的,但不會立即分配。當(dāng)進程使用多少時,它就從物理內(nèi)存中分離出來。劃分的方法是“映射”。操作系統(tǒng)設(shè)置虛擬內(nèi)存的起始地址,并將其標(biāo)記為相應(yīng)物理內(nèi)存的地址。在這里,只有操作系統(tǒng)知道,而進程沒有辦法知道。
3. 這是由windows的高級內(nèi)存管理機制決定的。物理內(nèi)存的地址空間只能由操作系統(tǒng)訪問(也可以使用硬件驅(qū)動程序,但它已經(jīng)屬于系統(tǒng)的較低層,進程屬于用戶層)。進程的虛擬內(nèi)存空間和物理內(nèi)存空間之間的關(guān)系只是一種不可見的映射關(guān)系。
4. 虛擬內(nèi)存通常只在系統(tǒng)的物理內(nèi)存用完時才使用,但此時系統(tǒng)非??ㄗ?。但也不是沒用。系統(tǒng)完全可以將非活動進程的一些數(shù)據(jù)放入虛擬內(nèi)存中。
5. 以上是基于32位windows系統(tǒng)。64位。我還沒有看到相關(guān)的資源。我不知道有沒有變化。
虛擬內(nèi)存與虛擬地址空間有什么聯(lián)系?
理論上,它是2的32字節(jié),即4G。
編程時,在32位CPU下,單個進程可以應(yīng)用的最大內(nèi)存默認(rèn)為2G,剩余2G作為系統(tǒng)保留給內(nèi)核。同時,操作系統(tǒng)也有相應(yīng)的開關(guān),將最大內(nèi)存增加到3G。以上也是開發(fā)過程中最讓人費解的一點。