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

操作系统:malloc与堆区内存管理

malloc是函数而不是系统调用,他的底层是同调调用brk和mmap这两个系统调用实现功能的,具体选择brk还是mmap要看申请的空间大小以及malloc中的阈值(一般是128kb)

注意申请的空间只有使用才会触发缺页中断映射到物理内存
不理解的话先去学习一下分页和分段这些概念

brk

特点

  • 进行堆指针的偏移
  • 申请的空间会比申请的大
  • 容易产生内存碎片
  • 空间释放后不会返回给操作系统而是给内存池
  • 维持了内存池从而减少了系统调用

mmap

特点

  • 申请的空间大
  • 申请的空间释放后回归操作系统而非内存池
  • 从文件映射区挖一块内存

brk相较于mmap适合用作小空间处理的原因可以从两方面理解

  • brk的原理是移动堆指针,地址连续用着用着会产生大量的内存碎片,性能提升不会太高
  • 减少对操作系统并发性的影响,大空间被挖走当内存池会影响操作系统的整体性能

free释放时是如何知道释放多大空间的

在malloc的前边几个字段会存储申请的空间大小,释放的时候会偏移回去,可以借助指针看看,空间大小一般会比申请的大

#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){int *cur=(int*)malloc(32);for(int i=0;i<8;i++) cur[i]=i;for(int i=-5;i<15;i++){cout<<*(cur+i)<<endl;}
}

在这里插入图片描述
可以看到这里的实际大小是奇数,计算一下,堆的对齐方式是16字节,头部8字节,多申请一位应该是为了避免你申请8字节时出现堆指针和内存重叠的情况,你细品

内存不够用时申请物理内存会发生什么

如果没有空闲的物理内存,那么内核就会开始进行回收内存的工作,回收的方式主要是两种:直接内存回收和后台内存回收。

  • 后台内存回收:在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。
  • 直接内存回收:如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。
  • 如果直接内存回收后,空闲的物理内存仍然无法满足此次物理内存的申请,那么内核就会触发 OOM机制,OOM机制会根据页面置换算法选择一个占用物理内存较高的进程,然后将其杀死,以便释放内存资源,如果物理内存依然不足,OOM会继续杀死占用物理内存较高的进程,直到释放足够的内存位置。

回收对象

  • 文件页,缓存磁盘数据/缓存文件数据等,如果修改过没有提交是脏页需要进行页面置换,否则的话一般认为可以直接释放
  • 匿名页,比如栈、堆数据,这类必须要进行页面置换

所以说当申请的空间大于实际拥有的内存量时需要进行大量的文件IO会变得非常的卡,可以设置回收倾向来适当缓解,一般推荐优先回收文件页

new/delete和malloc/free的关系

相关文章:

操作系统:malloc与堆区内存管理

malloc是函数而不是系统调用&#xff0c;他的底层是同调调用brk和mmap这两个系统调用实现功能的&#xff0c;具体选择brk还是mmap要看申请的空间大小以及malloc中的阈值&#xff08;一般是128kb&#xff09; 注意申请的空间只有使用才会触发缺页中断映射到物理内存 不理解的话先…...

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力&#xff0c;使人们暂时忘却生活当中的烦恼&#xff0c;增强人们的逻辑思维能力&#xff0c;游戏的艺术美也吸引着越来越多的玩家和厂商&#xff0c;寓教于乐&#xff0c;在放松人们心情的同时还可以活跃双手。在人类…...

JAVA多线程之JMM

文章目录 1. Java内存模型2. 内存交互3. 三大特性3.1 可见性3.1.1 可见性问题3.1.2 原因3.1.3 解决方法 3.2 原子性3.3 有序性 4. 指令重排5. JMM 与 happens-before5.1 happens-before关系定义5.2 happens-before 关系 在继续学习JUC之前&#xff0c;我们现在这里介绍一下Java…...

Windows10 专业版 系统激活

Windows10 专业版 系统激活 参考&#xff1a; Windows10系统激活技巧 第一步&#xff1a;在电脑桌面&#xff0c;新建一个文本文档 第二步&#xff1a;打开文本文档&#xff0c;输入以下代码后&#xff0c;直接保存关闭文档 slmgr/skms kms.03k.org slmgr/ato 第三步&#xff1…...

C#使用LINQ和EF Core

在实际应用中&#xff0c;您可以使用 LINQ 查询 EF Core 来执行各种数据库操作。通过 LINQ&#xff0c;您可以轻松地过滤、排序、分组和连接数据。 要使用LINQ查询EF Core中的数据&#xff0c;您可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保您已经安装了 Entit…...

数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署

简介 随着数字人物概念的兴起和生成技术的不断发展&#xff0c;将照片中的人物与音频输入进行同步变得越来越容易。然而&#xff0c;目前仍存在一些问题&#xff0c;比如头部运动不自然、面部表情扭曲以及图片和视频中人物面部的差异等。为了解决这些问题&#xff0c;来自西安…...

HTML5语法总结

文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展&#xff1a;相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展&#xff1a;表格结构标签合并…...

在github下载的神经网络项目,如何运行?

github网页上可获取的信息 在github上面&#xff0c;有一个requirements.txt文件&#xff0c;该文件说明了项目要求的python解释器的模块。 - 此外&#xff0c;还有一个README.md文件&#xff0c;用来说明项目的运行环境以及其他的信息。例如python解释器的版本是3.7、PyTorc…...

spring boot学习第十四篇:使用AOP编程

一、基本介绍 1&#xff0c;什么是 AOP &#xff08;1&#xff09;AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 &#xff08;2&#xff09;利用 AOP…...

凯特信安云签解决方案

联合解决方案 凯特信安基于《电子签名法》设计“云签服务方案”&#xff0c;应用人脸识别、电子签章签名云服务等技术&#xff0c;支持多个自然人、多个企业等签名&#xff0c;满足各种移动终端签署的应用场景。面向不动产登记、工改系统等社会公众服务系统&#xff0c;针对自然…...

【xr806开发板使用】连接wifi例程实现

##开发环境 win10 WSL ##1、环境配置 参考&#xff1a;https://aijishu.com/a/1060000000287513 首先下载安装wsl 和ubuntu https://docs.microsoft.com/zh-cn/windows/wsl/install &#xff08;1&#xff09;安装repo&#xff1a; 创建repo安装目录&#xff1a; mkdir ~/…...

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c; 功能模块&#xff1a; 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…...

新增多项功能,龙讯旷腾开源机器学习力场PWMLFF 2024.3版本上线

人工智能与传统计算机模拟结合是当今科学计算的一大趋势,机器学习力场作为其中的一个重要方向,能够显著提升分子动力学模拟的精度和效率。PWMLFF是一套由龙讯旷腾团队开发&#xff0c;在 GNU 许可下的开源软件包&#xff0c;用于快速生成媲美从头算分子动力学&#xff08;AIMD&…...

Docker常用命令练习

文章目录 Docker常用命令练习1.docker 基础命令2.镜像命令3.保存镜像4.加载镜像5.容器命令6.环境变量7. --rm8. --networkhost Docker常用命令练习 1.docker 基础命令 安装docker yum install docker启动docker systemctl start docker关闭docker systemctl stop docker重…...

Kafka(十)安全

目录 Kafka安全1 安全协议1.1 PALINTEXT1.2 SSL1.2.1 生成服务端证书1.2.2 生成客户端证书1.2.3 修改配置listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.namesecurity.inter.broker.protocolcontrol.plane.listener.name 1.3 SASL_PLAINT…...

流畅的 Python 第二版(GPT 重译)(四)

第二部分&#xff1a;函数作为对象 第七章&#xff1a;函数作为一等对象 我从未认为 Python 受到函数式语言的重大影响&#xff0c;无论人们说什么或想什么。我更熟悉命令式语言&#xff0c;如 C 和 Algol 68&#xff0c;尽管我将函数作为一等对象&#xff0c;但我并不认为 Py…...

windows docker

写在前面的废话 最近在学习riscv的软件相关内容&#xff0c;倒是有别人的sg2042机器可以通过ssh使用&#xff0c;但是用起来太不方便了&#xff0c;经常断掉&#xff0c;所以想着在自己的机器上跑一跑riscv的操作系统。最常见的有两种方法吧&#xff0c;第一个就是qemu&#xf…...

中国1km分辨率逐月地表太阳辐射均值数据集(1960-2022)

地表太阳辐射是地球系统的主要驱动因子&#xff0c;驱动着地球系统的能量、水和碳循环。它是地表水文、生态、农业等陆表过程模拟的重要驱动数据&#xff0c;也是太阳能利用的重要指标。发展长时间序列、高分辨率的地表太阳辐射数据集&#xff0c;对于地表过程研究、太阳能电厂…...

Android中内存泄漏的检测,解决方案以及示例

单例模式使用不当引起的内存泄漏 1. 什么是内存泄漏? 安卓内存泄漏是因为长生命周期的对象持有了短生命周期的引用 导致本应该本回收的内存无法回收,导致内存的占用越来越大,最终可能导致程序崩溃或者系统资源不足等问题。 在Android开发中,内存泄漏是一个常见的问题,…...

Android静默安装一(Root版)

近期开发上线一个常驻app&#xff0c;项目已上线&#xff0c;今天随笔记录一下静默安装相关内容。我分三篇静默安装&#xff08;root版&#xff09;、静默安装&#xff08;无障碍版&#xff09;、监听系统更新、卸载、安装。先说说我的项目需求&#xff1a;要求app一直运行&…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...