背景
我們都知道在 32 位系統(tǒng)上耀石,每個(gè)進(jìn)程都有自己 4GB 大小的獨(dú)立空間,互不影響凯楔。當(dāng)然窜骄,對(duì)內(nèi)核了解的同學(xué)則會(huì)質(zhì)疑說(shuō),4GB 大小的內(nèi)容可以大致分為兩部分摆屯,低 2 GB內(nèi)存空間是用戶地址空間,高 2 GB是內(nèi)核地址空間糠亩,而內(nèi)核地址空間是共享的虐骑,并非獨(dú)立。是的赎线,這沒(méi)錯(cuò)廷没。所以,本文中所指的獨(dú)立空間是用戶地址空間垂寥。
舉個(gè)例子來(lái)說(shuō)颠黎,進(jìn)程1 的 0x400000 內(nèi)存地址和 進(jìn)程2 中 0x400000 內(nèi)存地址是沒(méi)有任何關(guān)聯(lián)。任意修改其中一個(gè)內(nèi)存里的數(shù)據(jù)滞项,是不影響另一個(gè)的狭归。這邊是進(jìn)程獨(dú)立性。
但是文判,本文要介紹的這個(gè)知識(shí)點(diǎn)过椎,就是要突破這個(gè)獨(dú)立性的顯示,創(chuàng)建進(jìn)程共享內(nèi)存戏仓。確切的說(shuō)是在DLL中創(chuàng)建共享內(nèi)存疚宇,就是在DLL中創(chuàng)建一個(gè)變量亡鼠,然后DLL被加載到多個(gè)進(jìn)程空間,只要其中一個(gè)進(jìn)程修改了該變量的值敷待,其他進(jìn)程DLL中的這個(gè)值也會(huì)改變间涵,就相當(dāng)于多個(gè)進(jìn)程共享一塊內(nèi)存。
參考文檔和完整的文檔和源碼下載地址: