動態鏈接庫與共享內存:
我們知道,動態鏈接庫(在windows上表現為.dll,在linux下表現為.so)采用的是延遲加載機制,即程序在運行的過程中在被調用的時候才會被加載。一個動態庫在內存中只存在一份,可以被多個進程共享。這樣做很明顯可以節省內存空間。
那么問題來了:共享內存在內存中也是只存在一份,也可以被多個進程共享。在不同的進程中,共享的那段內存的被分配的地址會有所不同。那么,同樣是在內存中只存在一份,同樣是可以被其他進程共享,動態鏈接庫和共享內存的區別在哪呢?
區別就在於:多個程序雖然可以共享同一個動態鏈接庫中的相同代碼,但每一個進程都為動態鏈接庫使用的全部數據分配了自己的地址空間。而共享內存是代碼和數據均被多個程序所共享。動態鏈接庫只是實現了代碼的復用,對於數據,各個程序要自己保存。共享內存用於進程間通信,主要用於數據的內存共享。這也從側面反映出動態鏈接庫並不能用於實現進程之間通信。