在使用api“CreateFileMapping”创建后,是否可以增加共享内存大小?

时间:2011-10-31 05:49:58

标签: c++ windows process shared-memory memory-mapped-files

我按照设计在多个进程之间共享内存数据。

根据设计,应用程序需要多个内存文件,例如每个进程需要一个内存映射文件。但是某些进程需要较少的内存映射文件,例如它可以是10KB或更少。并且一些进程需要超过1mb的内存文件。一旦进程任务结束,那么我将使用相同的内存映射文件进行其他进程。

在这种情况下,我如何根据进程请求增加内存映射文件大小。就像我使用CreateFileMapping创建内存映射文件一样。我如何增加内存大小或减小大小。

我还有另一个子问题,如何在不关闭此内存映射文件的情况下清理此数据。 如果有人知道,请分享。

提前多多感谢。 原

2 个答案:

答案 0 :(得分:1)

你可以这样做。请参阅NtExtendSection

答案 1 :(得分:0)

否 - 您无法在创建后增加映射(请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537%28v=vs.85%29.aspx)!

你描述的尺寸听起来不成问题所以我只选择一个“足够大”的尺寸。

要清理您可以使用的数据,例如memset ()(请参阅http://msdn.microsoft.com/en-us/library/1fdeehz6.aspxhttp://www.cplusplus.com/reference/clibrary/cstring/memset/)或ZeroMemory()(这只是映射到{{1的Windows API宏) }})。