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

Linux内存中加载二进制,linux–程序退出后二进制文件会留在内存中吗?

我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码.程序退出后会发生什么?二进制文件是否留在内存中?该程序

我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码.

程序退出后会发生什么?二进制文件是否留在内存中?该程序的后续调用是否会发现代码已经在内存中,因此没有页面错误(假设两者之间没有任何运行,并且页面填充到磁盘)?

在我的Linux机器上运行一些实验似乎没有答案.我一遍又一遍地运行一些程序,每次都观察到相同数量的页面错误.这是一个相对安静的机器,所以我怀疑东西是在调用之间被调出来的.那么,为什么呢?为什么可执行文件不能保留在内存中?

最佳答案 这里有两件事需要考虑:

1)可执行文件的内容可能保存在OS缓存(磁盘缓存)中.虽然该数据仍在操作系统缓存中,但该数据的每次读取都将到达缓存,操作系统将遵循该请求,而无需从磁盘重新读取该文件

2)当进程退出时,操作系统取消映射到文件的每个内存页面,释放任何内存(通常,释放进程分配的每个资源,包括其他资源,如套接字等).严格来说,物理内存可能已归零,但并不十分必需(仍然,操作系统的安全级别可能需要将不再使用的页面归零 – 可能是Windows NT,2K,XP等,请执行此操作 – 请参阅此Does Windows clear memory pages?).对同一个可执行文件的另一个调用将创建一个全新的进程,它将在内存中映射相同的文件,但是对这些页面的第一次访问仍然会触发页面错误,因为最终它是一个新进程,一个不同的内存映射.所以,是的,页面错误发生,但与第一个相比,它们相同的可执行文件的第二个实例便宜得多.

当然,这仅仅是可执行文件的只读部分(包含代码和只读数据的段/模块).

可以考虑另一种情况:分叉.在这种情况下,每个页面都标记为写时复制.当在每个存储器页面上发生第一次写入时,OS内存管理器触发并拦截硬件异常.操作系统确定是否允许写入相关页面(例如:如果它是堆栈,堆或任何可写页面),如果是,则在允许进程修改页面之前分配内存并复制原始内容 – 为了保留其他过程中的原始数据.是的,还有另一种情况 – 共享内存,其中确切的物理内存映射到两个或多个进程.在这种情况下,写时复制标志当然不在存储页面上设置.

希望这能澄清内存页面的内容.



推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有