使用api“CreateFileMapping”创建后是否可以增加共享内存大小?
我根据设计在多个进程之间共享内存数据。
根据设计,应用程序需要多个内存文件,就像每个进程需要一个内存映射文件一样。但有些进程需要较少的内存映射文件,例如 10KB 或更小。有些进程需要超过1mb的内存文件。一旦进程任务结束,我将为其他进程使用相同的内存映射文件。
在这种情况下,我如何根据进程请求增加内存映射文件大小。就像我使用 CreateFileMapping 创建内存映射文件一样。我如何增加或减少内存大小。
我还有另一个子问题,如何在不关闭此内存映射文件的情况下清理此数据。 如果有人知道请分享。
预先非常感谢。 原
I am sharing a memory data between multiple processes as per design.
As per design the application requires multiple memory files, like each process requires one memory map file. But some processes needs less memory mapped file like it can be 10KB or less. and some processes required more than 1mb memory file. once the processes task over, then i will use the same memory mapped file for some other process.
In this scenario how i can increase the memory mapped file size based on the process request. Like once i create memory mapped file using CreateFileMapping. how i can increase the memory size or decrease the size.
also i have another sub question, how to clean this data without closing this memory mapped file.
please share if any one knows.
thanks a lot in advance.
hara
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以这样做。请参阅NtExtendSection。
You can do this. See NtExtendSection.
否 - 创建后无法增加映射(请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537%28v=vs.85%29.aspx)!
您描述的尺寸听起来没有问题,所以我只会选择一个“足够大的尺寸”。
要清理数据,您可以使用例如
memset ()
(请参阅 http://msdn.microsoft.com/en-us/library/1fdeehz6.aspx或者http://www.cplusplus.com/reference/clibrary/cstring/memset/) 或ZeroMemory()
(这只是映射到memset
的 Windows API 宏)。No - you can't increase the mapping after creation (see http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537%28v=vs.85%29.aspx)!
The sizes you describe don't sound problematic so I would just go with one "big enough size".
To clean the data you can use for example
memset ()
(see http://msdn.microsoft.com/en-us/library/1fdeehz6.aspx or http://www.cplusplus.com/reference/clibrary/cstring/memset/) orZeroMemory()
(which is just a Windows API macro mapping tomemset
).