当前位置: 首页 > news >正文

当new一块内存时,操作系统做了哪些事情

问题

当new一块内存时,操作系统做了哪些事情

我的回答

当我们在C++中使用new操作符申请内存时,操作系统和运行时库会做一系列工作:

首先,new操作符会调用operator new函数,这是C++运行时库的一部分,负责实际的内存分配。这个函数通常会先尝试使用内存分配器(如ptmalloc、jemalloc或tcmalloc)从其管理的内存池中分配内存。

如果内存池中有足够的空闲内存,分配器会直接返回一块合适的内存,这种情况下不需要操作系统参与。这是为什么小内存分配通常很快的原因。

但如果内存池不足,分配器就会向操作系统请求更多内存。在Linux系统中,这通常通过brk()或mmap()系统调用实现。brk()通过移动程序的break point(堆的末尾)来扩展堆空间;而mmap()则会映射一块新的虚拟内存区域。

当系统调用发生时,CPU从用户态切换到内核态,操作系统接管控制权。内核会检查进程的内存限制、系统可用内存等条件,决定是否满足请求。

值得注意的是,现代操作系统普遍采用虚拟内存技术和延迟分配策略。当我们申请内存时,操作系统只是分配了虚拟内存地址空间,并在页表中做了标记,但并不立即分配物理内存页。只有当程序首次访问某个地址时,才会触发缺页异常,此时内核才实际分配物理内存页并建立映射。

内存分配完成后,如果是使用new而不是new[],且申请的是非POD类型,还会调用对象的构造函数进行初始化。

http://www.xdnf.cn/news/1382095.html

相关文章:

  • 软考 系统架构设计师系列知识点之杂项集萃(134)
  • leetcode算法刷题的第二十天
  • 鸿蒙OS与Rust整合开发流程
  • 面试tips--JVM(3)--类加载过程
  • 动态加载和异步调用tasklet/workqueue day63 ay64
  • 中国剩余定理(以及扩展..)
  • .Net Core Web 架构(管道机制)的底层实现
  • [光学原理与应用-321]:皮秒深紫外激光器产品不同阶段使用的工具软件、对应的输出文件
  • 【黑客技术零基础入门】2025最新黑客工具软件大全,零基础入门到精通,收藏这篇就够了!
  • JAVA全栈Redis篇————List常用命令讲解
  • 【架构师干货】软件工程
  • Linux学习-TCP并发服务器构建(epoll)
  • Cesium 入门教程(十一):Camera相机功能展示
  • Burp系列【密码暴力破解+令牌token破解】
  • 深度学习篇---VGGNet网络结构
  • DeepInteraction++基于多模态交互的自动驾驶感知与规划框架
  • 【iOS】Masnory自动布局的简单学习
  • Linux(二) | 文件基本属性与链接扩展
  • Spring Security 深度学习(二): 自定义认证机制与用户管理
  • npm install --global @dcloudio/uni-cli 时安装失败
  • 一天认识一个神经网络之--CNN卷积神经网络
  • QT之双缓冲 (QMutex/QWaitCondition)——读写分离
  • LINUX ---网络编程(三)
  • 如何通过docker进行本地部署?
  • 机器学习回顾(二)——KNN算法
  • Day16_【机器学习概述】
  • 设计模式:组合模式(Composite Pattern)
  • 【数据结构与算法】LeetCode 20.有效的括号
  • Vue 组件循环 简单应用及使用要点
  • 微服务保护和分布式事务-01.雪崩问题-原因分析