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

发布于 2024-12-13 08:34:14 字数 301 浏览 1 评论 0原文

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

根据设计,应用程序需要多个内存文件,就像每个进程需要一个内存映射文件一样。但有些进程需要较少的内存映射文件,例如 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

死开点丶别碍眼 2024-12-20 08:34:14

你可以这样做。请参阅NtExtendSection

You can do this. See NtExtendSection.

一袭白衣梦中忆 2024-12-20 08:34:14

否 - 创建后无法增加映射(请参阅 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/) or ZeroMemory() (which is just a Windows API macro mapping to memset).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文