2010-09-07 104 views
0

我必須開始說我對這個話題的想法很少,所以如果我看起來很無知,那麼請幽默我。跨編譯器的共享內存?

由於必須在g ++編譯程序中使用vC++庫的問題,我構建了一個本地服務器 - 客戶機系統,其中服務器在vC++中編譯,客戶機在g ++中編譯,並且它們通過套接字進行交互。大量的數據傳輸發生在整個套接字上(每個22個字段的記錄接近2,00,000條記錄),這是一個主要的瓶頸,並且會使整個過程變慢。有沒有辦法在服務器和客戶端進程之間建立一種共享內存,以便訪問速度更快?

+1

你好AKS,你有沒有真正實現編譯進程間共享內存通信由不同的編譯器? (你提到vC++和g ++)。 – tssch 2013-09-02 12:54:29

回答

1

如果他們在同一臺電腦上,那麼是的,共享內存更快,它通過不同的程序工作。

如果它在不同的PC上,那麼也是,但它不會比插座更快。

+0

其在同一臺電腦上。我如何使用共享內存?請點我一些資源 – aks 2010-09-07 10:06:44

+0

看看這裏:http://www.google.de/search?q=windows+shared+memory&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:官方客戶端=火狐-a和這裏:http://stackoverflow.com/questions/697664/using-shared-memory-under-windows-how-to-pass-different-data – BarsMonster 2010-09-07 10:12:51

+0

你會推薦boost :: interprocess我的情況? – aks 2010-09-07 10:21:25

2

我假設你在Windows系統上使用它? (你不說。)因爲它是本地客戶端服務器,所以你還有其他選擇。

對於Windows跨進程的大量數據通信,我認爲你應該看看使用內存映射文件。這些可以使用全局內存句柄共享。然後用共享的內核對象進行同步(互斥,我會建議,或事件),您可以控制訪問以確保它以安全的方式完成。

只要它始終是本地的,那可能是您最快和最安全的方法。

(我願意給你更具體的API的信息,但我還是把我的書家昨天作爲辦公室的一部分清理 - !對不起)

+1

「管理內存映射文件」http://msdn.microsoft.com/zh-cn/library/ms810613.aspx – tenfour 2010-09-07 10:08:18