zl程序教程

C 内存管理

  • 深入理解Aarch64的内存管理

    深入理解Aarch64的内存管理

    本文是对learn_the_architecture_-_aarch64_memory_management的部分翻译和个人注解。个人英文水平有限,若有翻译不当,欢迎与我交流。总览 本文介绍了AAR64内存管理中最重要的内容--内存转换,解释了虚拟地址是如何翻译为物理地址的,翻译表的格式,以及如何管理TLBS。什么是内存管理 内存管理描述了如何控制操作性系统对内存的访问。每次操作系统或应用程序访问

    日期 2023-06-12 10:48:40     
  • Go栈内存管理

    Go栈内存管理

    栈内存栈区的内存由编译器自动进行分配和释放,栈区中存储着函数的参数以及局部变量,它们会随着函数的创建而创建,函数的返回而销毁。每个goroutine都维护着一个自己的栈区,这个栈区只能自己使用不能被其他goroutine使用。栈区的初始大小是2KB. 栈内存空间、结构和初始大小经过了几个版本的更迭v1.0 ~ v1.1 : 最小栈内存空间为4KB;v1.2 : 将最小栈内存提升到了8KB;v1.3

    日期 2023-06-12 10:48:40     
  • 操作系统段页结合的实际内存管理--13

    操作系统段页结合的实际内存管理--13

    操作系统段页结合的实际内存管理--13段、页结合: 程序员希望用段, 物理内存希望用页,所以…段、页同时存在:段面向用户/页面向硬件段、页同时存在是的重定位(地址翻译)一个实际的段、页式内存管理这个故事从哪里开始?段、页式内存下程序如何载入内存?故事从fork()开始 --> 分配虚存,建段表进程0、进程1、进程2的虚拟地址接下来应该是什么了? ---> 分配内存、建页表copy_pa

    日期 2023-06-12 10:48:40     
  • 2万字|30张图带你领略glibc内存管理精髓

    2万字|30张图带你领略glibc内存管理精髓

    大家好,我是雨乐。最近在逛知乎的时候,看到篇帖子,如下:看了下面所有的回答,要么是没有回答到点上,要么是回答不够深入,所以,借助本文,深入讲解C/C++内存管理。1 写在前面源码分析本身就很枯燥乏味,尤其是要将其写成通俗易懂的文章,更是难上加难。本文尽可能的从读者角度去进行分析,重点写大家关心的点,必要的时候,会贴出部分源码,以加深大家的理解,尽可能的通过本文,让大家理解内存分配释放的本质原理。接

    日期 2023-06-12 10:48:40     
  • 五万字 | 深入理解Linux内存管理

    五万字 | 深入理解Linux内存管理

    作者简介: 程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。1.1 内存管理的意义1.2 原始内存管理1.3 分段内存管理1.4 分页内存管理1.5 内存管理的目标1.6 Linux内存管理体系2.1 物理内存节点2.2 物理内存区域2.3 物理内存页面2.4 物理内存模型2.5 三级区划关系3.1 Buddy System3.1.1 伙伴系统的内存来源3.1.2 伙伴系

    日期 2023-06-12 10:48:40     
  • JVM内存分配与管理详解

    JVM内存分配与管理详解

    大家好,又见面了,我是你们的朋友全栈君。 概述了解C++的程序员都知道,在内存管理领域,都是由程序员维护与管理,程序员用于最高的管理权限,但对于java程序员来说,在内存管理领域,程序员不必去关心内存的分配以及回收,在jvm自动内存管理机制的帮助下,不需要想C++一样为每一个new操作去编写delete/free代码,这一切交给jvm,但正是这一切都交给了jvm,一旦出现内存泄漏与溢出,如果不

    日期 2023-06-12 10:48:40     
  • 21-内存与内存管理

    21-内存与内存管理

    内存基础知识 内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。 在多道程序环境下,同一时间可能会有多个程序并发执行,即有多个程序的数据需要同时存放在内存中,此时,为了区分内

    日期 2023-06-12 10:48:40     
  • 动态内存管理

    动态内存管理

    现在有一个需求:先输入一个整数n,再输入以空格分隔的n个整数,然后求出这n个整数中最大的数。#include<stdio.h> int main() { int n; int arr[20]; // 输入n的值 scanf("%d", &n); // 循环n次,输入n个数据 for (int i = 0; i < n; i++) {

    日期 2023-06-12 10:48:40     
  • 还有程序员搞不懂JVM垃圾回收器并发标记清除回收的内存管理?

    还有程序员搞不懂JVM垃圾回收器并发标记清除回收的内存管理?

    并发标记清除回收JVM中从JDK 4正式引入并发回收,用于解决垃圾回收过程中停顿时间过长的问题。JVM的垃圾回收器通常采用分代设计,新生代和老生代采用不同的垃圾回收算法,在并发垃圾回收器中,新生代采用并行的复制算法,老生代采用并发的标记清除算法。狭义上所说的并发回收(Concurrent-MarkSweep,CMS)仅仅指针对老生代的回收,而广义上所说的并发垃圾回收指的是新生代采用并行复制算法、

    日期 2023-06-12 10:48:40     
  • oc的内存管理机制

    oc的内存管理机制

    OC中每个对象都有一个与之对应的整数,叫“引用计数器”,当一个对象在创建之后它的引用计数器值加1,当调用这个对象的alloc、retain、new、copy方法之后引用计数器值自动在原来的基础上加1,当调用这个对象的release方法之后它的引用计数器值减1,如果一个对象的引用计数器值为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象。内存管理原则: 1.使用new、alloc、co

    日期 2023-06-12 10:48:40     
  • Linux内存管理

    Linux内存管理

    本篇介绍本篇介绍下Linux的内存管理,用系统角度看内存的寻址和分配机制。内容介绍内存管理应该是系统中最难的模块之一了,而且历史也悠久,就先来简单回顾下。分段和分页谈到内存管理,最先想到的就是分段和分页机制。计算机刚出现的时候,并没有这些,刚开始是直接使用的物理地址,也就是代码中操作的地址是可以直接和物理地址对应上的,可是后来随着多进程调度的需求,以及有限的物理内存,于是人们就开始做规定,比如对于

    日期 2023-06-12 10:48:40     
  • 【C++】动态内存管理

    【C++】动态内存管理

    文章目录一、C/C++ 内存分布二、C语言动态内存管理方式三、C++动态内存管理方式1、new/delete 操作内置类型2、new/delete 操作自定义类型四、operator new 与 operator delete五、new 和 delete 的实现原理1、内置类型2、自定义类型六、定位 new 表达式 (了解)七、常见面试题1、malloc/free 和 new/delete 的区别

    日期 2023-06-12 10:48:40     
  • 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录一、Linux 内核在操作系统中的层级二、Linux 内核子系统三、Linux 内核子系统之间的关系一、Linux 内核在操作系统中的层级Linux 内核 所在层级 : 整个计算机系统中 , 由下到上介绍 :计算机硬件 处于最底层 ;计算机硬件 上面一层是 Linux 内核 , 计算机的所有硬件操作都要经过内核 , 内核是 抽象资源操作 与 具体硬件操作细节 之间的接口 ;Linux 内

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    文章目录一、禁止 / 开启内核抢占 与 方法保护临界区二、编译器优化屏障三、preempt_disable 禁止内核抢占 源码四、preempt_enable 开启内核抢占 源码一、禁止 / 开启内核抢占 与 方法保护临界区如果要使用 " 内存屏障 " , 如 : 禁止 内核 抢占 " 方法保护临界区 " :首先 , 声明 preempt_disable()

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】优化内存屏障 ④ ( 处理器内存屏障 | 八种处理器内存屏障 | 通用内存屏障 | 写内存屏障 | 读内存屏障 | 数据依赖屏障 | 强制性内存屏障 |SMP内存屏障 )

    【Linux 内核 内存管理】优化内存屏障 ④ ( 处理器内存屏障 | 八种处理器内存屏障 | 通用内存屏障 | 写内存屏障 | 读内存屏障 | 数据依赖屏障 | 强制性内存屏障 |SMP内存屏障 )

    文章目录一、处理器内存屏障二、Linux 内核处理器内存屏障一、处理器内存屏障" 处理器内存屏障 “ 针对 ” CPU " 之间的内存访问乱序 和 CPU 访问外设乱序 问题 ;为了 提高 " 流水线 " 性能 , 新式处理器可以采用 " 超标量 体系结构 “ 和 ” 乱序执行 " 技术 , 可以在 一个时钟周期 中 并行执行多条指令 ;

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

    【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

    文章目录一、查看 Linux 操作系统位数二、查看 Linux 操作系统软硬件信息一、查看 Linux 操作系统位数在 64 位的 Linux 中 ,使用 48 位 表示 " 虚拟地址空间 " ;使用 45 位 表示 " 物理地址空间 " ;执行getconf LONG_BIT复制命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

    【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

    文章目录一、Linux 系统 动态分配堆内存 方式二、brk 系统调用 动态分配堆内存一、Linux 系统 动态分配堆内存 方式Linux 系统中 , 提供了 2 种方式 进行 " 动态分配堆内存 " 操作 ;① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 )二、Linux 内核架构层次三、Linux 系统调用接口一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 )内存管理架构 由 3 部分组成 :① 用户空间 : 在 " 用户空间 " 中 , 使用 malloc 函数 申请 " 堆内存 " , 使用 free 函数

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

    【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

    文章目录一、虚拟地址空间布局架构二、用户虚拟地址空间划分一、虚拟地址空间布局架构在 64 位的 Linux 操作系统中 , " ARM64 架构 " 并 不支持 64 位的虚拟地址 , 最大只支持 48 位的虚拟地址 , 64 位地址太大 , 并不需要那么大的内存空间 ;" ARM64 架构 " 中 , Linux 系统的 " 内核虚拟地址 “ 与

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )

    【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )

    文章目录一、用户虚拟地址空间组成二、内存描述符 mm_struct 结构体源码一、用户虚拟地址空间组成" 用户虚拟地址空间 " 包括以下区域 :① 代码段② 数据段③ 未初始化数据段④ 动态库 代码段 , 数据段 , 未初始化数据段 ;⑤ 堆内存 : 通过 malloc brk vmalloc 等函数 申请的 动态分配 的内存 ;⑥ 栈内存 : 存放 局部变量 和 函数调用栈

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )

    【Linux 内核 内存管理】虚拟地址空间布局架构 ⑥ ( mm_struct 结构体源码 | vm_area_struct 结构体源码 )

    文章目录一、mm_struct 结构体源码二、vm_area_struct 结构体源码一、mm_struct 结构体源码mm_struct 结构体 , 定义在 Linux 内核源码的 linux-4.12\include\linux\mm_types.h#359 位置 ;mm_struct 结构体中的 mmap 成员就是 vm_area_struct 结构体 类型的 , 该成员描述 "

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )

    【Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )

    文章目录一、vm_area_struct 结构体成员分析1、vm_ops 成员二、vm_operations_struct 结构体成员分析1、open 函数指针2、close 函数指针3、mremap 函数指针4、fault 函数指针5、huge_fault 函数指针6、map_pages 函数指针7、page_mkwrite 函数指针三、vm_area_struct 结构体完整源码四、vm_op

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )

    【Linux 内核 内存管理】内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 )

    文章目录一、mmap 创建内存映射代码示例1、fopen 打开或创建文件2、lseek 设置文件大小3、mmap 函数使用4、munmap 删除内存映射二、完整代码示例一、mmap 创建内存映射代码示例1、fopen 打开或创建文件使用 fopen 函数 , 打开一个文件 , 此时文件可能不存在 , 需要创建文件 ; // 打开文件 fd = open(argv[1], O_CREA

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )

    【Linux 内核 内存管理】munmap 系统调用源码分析 ② ( do_munmap 函数执行流程 | do_munmap 函数源码 )

    文章目录一、do_munmap 函数执行流程二、do_munmap 函数源码munmap 系统调用函数 调用了 vm_munmap 函数 , 在 vm_munmap 函数 中 , 又调用了 do_munmap 函数 , do_munmap 函数 是 删除 内存映射 的 核心函数 ;一、do_munmap 函数执行流程do_munmap 函数执行流程 :根据 unsigned long start

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构 | 内存节点描述 | 内存节点 pglist_data 结构体 | pglist_data 结构体源码 )

    【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构 | 内存节点描述 | 内存节点 pglist_data 结构体 | pglist_data 结构体源码 )

    文章目录一、内存节点描述二、内存节点 pglist_data 结构体三、pglist_data 结构体源码内存管理系统 3级结构 :① 节点 Node ,② 区域 Zone ,③ 页 Page ,Linux 内核中 , 使用 上述 3 级结构 描述 和 管理 " 物理内存 " ;一、内存节点描述Linux 内核中 , 内存节点 ( Node ) 是 " 内存管理 &q

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )

    【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )

    文章目录一、内存区域 zone 简介二、zone 结构体源码分析1、watermark 成员2、lowmem_reserve 成员3、zone_pgdat 成员4、pageset 成员5、zone_start_pfn 成员6、managed_pages、spanned_pages、present_pages成员7、name 成员8、free_area 成员三、zone 结构体源码内存管理系统 3级

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】引导内存分配器 bootmem ① ( 引导内存分配器 bootmem 工作机制 | 引导内存分配器 bootmem 的描述 bootmem_data 结构体 )

    【Linux 内核 内存管理】引导内存分配器 bootmem ① ( 引导内存分配器 bootmem 工作机制 | 引导内存分配器 bootmem 的描述 bootmem_data 结构体 )

    文章目录一、引导内存分配器 bootmem 简介1、引导内存分配器 bootmem 引入2、引导内存分配器 bootmem 工作机制二、引导内存分配器 bootmem 描述 bootmem_data 结构体一、引导内存分配器 bootmem 简介1、引导内存分配器 bootmem 引入Linux 内核 初始化 时 , 需要进行内存分配 , 启动阶段的 内存分配 与 运行时的 内存分配 机制不同 ;

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )

    【Linux 内核 内存管理】memblock 分配器 ③ ( memblock_region 内存块区域 | memblock_region 结构体成员分析 | memblock 分配器标志位 )

    文章目录一、memblock_region 内存块区域二、memblock_region 结构体成员分析1、base 成员2、size 成员3、flags 成员4、nid 成员三、memblock 分配器标志枚举1、MEMBLOCK_NONE2、MEMBLOCK_HOTPLUG3、MEMBLOCK_MIRROR4、MEMBLOCK_NOMAP一、memblock_region 内存块区域membl

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】memblock 分配器 ④ ( memblock、memblock_type、memblock_region 结构体的关系 )

    【Linux 内核 内存管理】memblock 分配器 ④ ( memblock、memblock_type、memblock_region 结构体的关系 )

    文章目录一、memblock、memblock_type、memblock_region 结构体的关系1、memblock、memblock_type 关系2、memblock_type、memblock_region 关系二、上述数据结构关系图示一、memblock、memblock_type、memblock_region 结构体的关系1、memblock、memblock_type 关系me

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )

    【Linux 内核 内存管理】memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )

    文章目录一、memblock_free 函数分析二、memblock_remove_range 函数分析memblock 分配器提供了如下编程接口 :① 添加内存 : memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;② 删除内存 : memblock_remove 函数 , 删除 内存块区域 ;③ 分配内存 :

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )

    【Linux 内核 内存管理】分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )

    文章目录一、备用内存区域列表二、ZONELIST_FALLBACK、ZONELIST_NOFALLBACK 枚举三、zoneref 结构体四、备用内存区域借用物理页规则一、备用内存区域列表假如 首选 内存节点 或 内存区域 不能满足 内存分配请求 ,就需要从 " 备用内存区域 " 借用 物理页 进行 内存分配 , 该操作需要遵守如下算法规则 ;" 内存节点 "

    日期 2023-06-12 10:48:40