在RedHatLinux中使用共享物件(轉)

BSDLite發表於2007-08-11
在RedHatLinux中使用共享物件(轉)[@more@]  充分利用共享記憶體並不總是容易的。在本文中,IBM 的 Sachin Agrawal 與我們共享了他的 C++ 專門技術,展示了物件導向如何去利用一個獨特而實用的程式間通訊通道的關鍵優勢。     就時間和空間而言,共享記憶體可能是所有現代作業系統都具備的最高效的程式間通訊通道。共享記憶體 同時將地址空間對映到多個程式:一個程式只需依附到共享記憶體並像使用普通記憶體一樣使用它,就可以開始與其他程式進行通訊。     不過,在物件導向程式設計領域中,程式更傾向於使用共享物件而不是原始的資訊。透過物件,不需要再對物件中容納的資訊進行序列化、傳輸和反序列化。共享物件也駐留在共享記憶體中,儘管這種物件“屬於”建立它們的程式,但是系統中的所有程式都可以訪問它們。因此,共享物件中的所有資訊都應該是嚴格與特定程式無關的。     這與當前所有流行的編譯器所採用的 C++ 模型是直接矛盾的:C++ 物件中總是包含指向各種 Vee-Table 和子物件的指標,這些是 與特定程式相關的。要讓這種物件可以共享,您需要確保在所有程式中這些指標的目標都駐留在相同的地址。     在一個小的示例的幫助下,本文展示了在哪些情況下 C++ 模型可以成功使用共享記憶體模型,哪些情況下不能,以及可能從哪裡著手。討論和示例程式都只限於非靜態資料成員和虛擬函式。其他情形不像它們這樣與 C++ 物件模型關係密切:靜態的和非靜態非虛擬的成員函式在共享環境中沒有任何問題。每個程式的靜態成員不駐留在共享記憶體中(因此沒有問題),而共享的靜態成員的問題與這裡討論到的問題類似。     環境假定   本文僅侷限於用於 32 位 x86 Interl 體系結構的 Red Hat Linux 7.1,使用版本 2.95 的 GNU C++ 編譯器及相關工具來編譯和測試程式。不過,您同樣可以將所有的思想應用到任意的機器體系結構、作業系統和編譯器組合。     示例程式   示例程式由兩個客戶機構成:shm_client1 和 shm_client2,使用由共享物件庫 shm_server 提供的共享物件服務。物件定義在 common.h 中:     清單 1. common.h 中的定義     
QUOTE:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946601/,如需轉載,請註明出處,否則將追究法律責任。

在RedHatLinux中使用共享物件(轉)
請登入後發表評論 登入
全部評論

相關文章