2010-09-07 70 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