热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

windows-两个进程之间的普通共享内存(没有文件映射,没有管道,没有其他额外的)

如何解决《windows-两个进程之间的普通共享内存(没有文件映射,没有管道,没有其他额外的)》经验,为你挑选了1个好方法。

如何拥有一个孤立的内存部分,它根本不支持任何文件或额外的管理层,如管道,可以在同一台Windows机器上的两个专用进程之间共享?

大多数文章都指向了CreateFileMapping的方向.让我们从那里开始:

具有hFile = INVALID_HANDLE_VALUE的CreateFileMapping如何实际工作?根据

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx

它"...创建一个指定大小的文件映射对象,该对象由系统页面文件而不是文件系统中的文件支持..."

假设我在内存中写了一些东西,它由CreateFileMapping映射,并带有hFile = INVALID_HANDLE_VALUE.在什么条件下将此内容写入磁盘上的页面文件?

此外,我对共享内存使用的动机的理解是保持性能和优化.为什么文章"创建命名共享内存"(https://msdn.microsoft.com/de-de/library/windows/desktop/aa366551(v=vs.85).aspx)引用CreateFileMapping,如果没有一个属性组合,会阻止写入文件,例如页面文件?

回到最初的问题:我担心,CreateFileMapping不够好......那么什么会起作用?



1> zwol..:

你误解了系统分页文件"支持"内存意味着什么.(不要感觉不好; Raymond Chen将您从MSDN引用的文本描述为" Win32文档中最容易被误解的句子之一.")几乎所有计算机的内存都被磁盘上的某些内容"支持" ; 只有内核专用且尽量少使用的"非分页池"才是.如果页面没有普通命名文件支持,则它由系统页面文件支持.除非需要,否则操作系统不会将页面写入系统页面文件,但如果确实需要,则可以.

该体系结构旨在确保当进程无关时,可以将进程完全 "分页"到RAM中.这曾经比现在重要得多,但它仍然很有价值; 典型的Windows桌面将有许多进程"空闲"等待可能永远不会发生的事件(例如需要假脱机打印作业).这些进程可以被分页,内存可以更有建设性地使用.

CreateFileMappinghfile=INVALID_HANDLE_VALUE是,其实你想要什么.只要共享内存的进程正在积极地处理它,它就会保留在RAM中并且不存在性能问题.如果他们闲着,是的,它可能会被淘汰,但这很好,因为他们没有做任何事情.

可以指示系统不要将一大块内存分页; 这就是VirtualLock的用途.但它意味着用于包含秘密信息的小块内存,将其写入页面文件可能会泄露秘密.MSDN页面警告您"每个版本的Windows都有一个进程可以锁定的最大页数限制.这个限制是故意小的,以避免严重的性能下降."


推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 介绍一个提供正版Windows软件下载的权威网站,确保用户能够安全合法地获取所需软件。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
author-avatar
啊123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有