2014-02-12 344 views
0

我正在C中創建一個跨平臺共享庫。我知道多個操作系統/硬件之間存在很多差異,每增加一次新操作系統都會增加混亂。爲了解決這個問題,我決定創建一個共享對象。在創建共享對象庫時,我遇到了這個問題,經過研究發現它是共享內存和堆內存問題。如何創建共享磁頭內存exe和dll /共享對象

現在我想要創建一個共享對象內存或磁頭內存。因此,可以通過不同的EXE或另一個DLL /共享對象進程訪問相同的內存。我已經通過搜索網絡共享堆內存和其他方面的許多建議。幾乎所有的解決方案都以C++提供。但我只需要C語言。請讓我知道如何在C中共享對象內存,以便共享對象創建的對象可以被exe使用,銷燬或共享。

目前使用的CentOS 6 - 海灣合作委員會在Linux,Mac和Windows

回答

0

這聽起來像你正在使用Windows創建共享庫和測試,在這種情況下,您創建使用內存共享內存映射文件。

首先,使用CreateFileMapping來創建一個內存映射句柄。通過將API調用的第一個參數設置爲INVALID_HANDLE_VALUE,您告訴Windows不要將實際文件映射到內存中,而是要創建一個共享內存區域。您可以爲該地區命名,以便其他進程可以打開該地區。

創建文件映射後,使用MapViewOfFile將共享區域映射到您的地址空間。這會給你一個指向共享區域的指針,然後你可以直接寫入它。

如果你在Linux或MacOS上,那麼你會想要使用mmap呼叫與MAP_ANONYMOUSMAP_SHARED標誌(我認爲)。

由於沒有適用於所有平臺的標準C API,因此您需要封裝API並使用一些神奇技巧來選擇正確的實現。

+0

當前使用CentOS 6 - GCC創建共享庫並在Linux,Mac和Windows上測試 – Vineet1982

+0

@ Vineet1982 - 我添加了更多信息 – Sean