windows是乙個以虛擬記憶體為基礎的作業系統。在這種系統環境下,windows記憶體管理器經常在記憶體中來回移動物件,依此來
滿足各種應用程式的記憶體需要。物件被移動意味著它的位址變化了。如果位址總是如此變化,我們該到**去找物件呢?
為了解決這個問題,windows作業系統為各應用程式騰出一些記憶體儲存位址,用來專門登記個應用在記憶體中的位址變化,(
所以控制代碼是指向位址的位址。)控制代碼所記錄的就是記憶體管理器中物件不斷改編後的位址。 這樣我們只需記住這個控制代碼位址
就可以簡介地知道物件具體在記憶體中的哪個位置。這個位址是在物件裝在(load)時系統分配給的,當系統解除安裝時有釋放給
系統。控制代碼位址(穩定) ---> 記載著物件在記憶體中的位址 ---> 物件在記憶體中的位址(不穩定)---> 實際物件
本質:windows程式中並不是用實體地址來標識乙個記憶體塊,檔案,任務或動態裝入模組的,相反的,windows api給這些專案
分配確定的控制代碼,並將據並返回給應用程式,然後通過控制代碼來進行操作。
但是必須注意的是程式每次從新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼,而且絕大多數情況的確
不一樣,這和每次電影院售給我們的門票是不同的座位是一樣的道理。
程序常常被定義為程式的執行。可以把乙個程序看成是乙個獨立的程式,在記憶體中有其完備的資料空間和**空間。乙個程序
所擁有的資料和變數只屬於它自己。
執行緒則是某一程序中一路單獨執行的程式。也就是說,執行緒存在於程序之中。乙個程序由乙個或多個執行緒構成,各執行緒共享
相同的**和全域性資料,但各有其自己的堆疊。由於堆疊式每個執行緒乙個,所以區域性變數對每一縣城來說是私有的。由於所
有執行緒共享同樣的系統區域,作業系統分配給乙個程序的資源對該程序的所有執行緒都是可用的,正如全域性資料可供所有執行緒
使用一樣。
簡而言之,乙個程式至少有乙個程序,乙個程序至少有乙個執行緒。執行緒的劃分度小於程序,使得多執行緒程式的併發性高。另
外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。執行緒在執行過程中
與程序還是有區別的。每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。
但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。從邏輯角度看來,多執行緒的意義在
於乙個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看作多個獨立的應用,來實現程序的排程
和管理以及資源分配,這就是程序和執行緒的重要區別。
乙個執行緒可以建立和撤銷另乙個執行緒,同乙個程序中的多個執行緒之間可以併發執行。
程序和執行緒的主要差別在於他們是不同的作業系統資源管理方式。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下
不會對其它程序產生影響,而執行緒只是乙個程序中的不同執行路徑。
執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要
比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且有要共享某些變數的
併發操作,只能用執行緒,不能用程序。
在mac、windows nt等採用微核心結構的作業系統中,程序的功能發生了變化:他只是資源分配的單位,而不再是排程執行
的單位。在微核心系統中,真正排程執行的基本單位是執行緒。因此,實現併發功能的單位是執行緒。
執行緒是程序中執行運算的最小單位,亦即執行處理排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那
麼執行緒表示完成該任務的許多可能的子任務之一。
windows 虛擬記憶體
虛擬記憶體的實現方法和過程 1 當乙個應用程式被啟動時,作業系統就建立乙個新的程序,被給每個程序分配2gb的虛擬位址 不是記憶體,只是位址 2 虛擬記憶體管理器將應用程式的 對映到那個那個應用程式的虛擬位址中的某個位置,並把當前所需要的 讀取到實體地址中 注意 虛擬位址和應用程式 的實體地址記憶體中...
windows筆記 虛擬記憶體
windows提供了3種進行記憶體管理的方法 虛擬記憶體,最適合用來管理大型物件或結構陣列。記憶體對映檔案,最適合用來管理大型資料流 通常來自檔案 以及在單個計算機上執行的多個程序之間共享資料。記憶體堆疊,最適合用來管理大量的小物件。pvoid virtualalloc pvoid pvaddres...
《Windows核心程式設計》筆記 虛擬記憶體 記憶體
1 32位系統支援的最大位址空間4gb 2 32 為何是4gb而不是4gb呢?因為最小儲存單元是byte 這個是由系統決定,有些系統可能不一樣 由上可知 記憶體條容量大於4gb時,32位系統可能會浪費記憶體。記憶體條小於4gb時,32位系統支援的最大定址空間由記憶體條容量決定。2 虛擬記憶體是為了擴...