zl程序教程

内存管理

  • Flink JobManager内存管理机制介绍与调优总结

    Flink JobManager内存管理机制介绍与调优总结

    作者:董伟柯,腾讯云大数据高级工程师概要我们知道,旧版本 Flink 的 JobManager 作为管理者,只承担着初始化和协调的任务,内存压力非常小,很少出现 OOM 等问题。但是,随着 Flink CDC [1] 实时数据捕获技术的广泛应用,以及采用 Flink 新版 Source 接口(FLIP-27: Refactor Source Interface [2])的 Connector 日渐

    日期 2023-06-12 10:48:40     
  • AntDB内存管理之内存上下文

    AntDB内存管理之内存上下文

    1.主题说明AntDB的内存管理在开发时,使用了内存上下文机制来实现内存管理。本文就从AntDB的内存上下文机制出发,解析内存上下文的实现原理。AntDB的代码中,涉及到内存的处理时,经常会看到下面这样的代码。图1:切换内存上下文示例以及图2所示的代码。图2:在内存上下文中申请内存这与平常开发C/C++程序的内存操作方式不太一样,多多少少会让人产生一些疑惑:内存操作前后的MemoryContext

    日期 2023-06-12 10:48:40     
  • 虚拟存储管理技术概念_虚拟内存管理

    虚拟存储管理技术概念_虚拟内存管理

    大家好,又见面了,我是你们的朋友全栈君。 一、传统存储管理方式的特征、缺点二、虚拟存储器的定义主存和辅存共同构成了虚拟存储器。对于应用程序员来说,虚拟存储器是透明的。虚拟存储器即对磁盘存储器进行抽象,将磁盘存储器组织成一个连续的存储器,将主存看成是磁盘存储器的一个高速缓存。因此,虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。 三、访问过程的步骤(1)CPU使用虚地址时,由

    日期 2023-06-12 10:48:40     
  • (44)STM32——内存管理实验

    (44)STM32——内存管理实验

    目录学习目标原理分配释放代码内存管理控制器内存管理宏定义内存管理数组总结 学习目标         本节我们要来学习的是内存管理实验,主要用来解决的问题其实和C语言中数组遇到的问题类似,就是我们不知道到底需要多少内存,为了避免数组越界,我们只能定义一个很大的数组,但是在单片机这种“寸土寸金”的地方就很不现实了,所以我们必须引入C语言中的内存管理函数malloc和free了。 原理        

    日期 2023-06-12 10:48:40     
  • Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)

    Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)

    今天介绍一下JVM内部的一些区域,以及具体的区域在运行过程中会发生哪些异内存常! 其实也就对应了内存管理的第一篇中 JVM的第三个阶段,程序运行内存溢出。一、概述Java的内存管理采用[自动内存管理]机制,因为这个自动管理机制,Java程序员就不需要去写释放内存的代码,而且不容易出现内存泄漏问题(比C/C++程序员少一些烦恼)。但是由于内存的申请和释放都交给了Java虚拟机,一旦出现内存泄漏和溢出

    日期 2023-06-12 10:48:40     
  • 万字整理内存管理之Cache

    万字整理内存管理之Cache

    为什么需要cache多级cache存储结构多级cache之间的配合工作直接映射缓存(Direct mapped cache)直接映射缓存的优缺点两路组相连缓存(Two-way set associative cache)两路组相连缓存优缺点全相连缓存(Full associative cache)Cache分配策略(Cache allocation policy)Cache更新策略(Cache u

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

    Linux内存管理:memblock

    内存管理是操作系统内核中最复杂的部分之一, start_kernel函数在内核启动第一个init进程前初始化了所有的内核特性(包括那些依赖于不同架构的特性),你也许还记得引导时创立的临时页表,但复杂的内存管理部分还没有开始,当start_kernel函数被调用时,我们会看到初期内存管理到更复杂的内存管理数据结构和技术的转变,为了更好的理解内核的初始化过程,我们需要对这些技术有更清晰的理解,今天我们

    日期 2023-06-12 10:48:40     
  • Buddy 内存管理机制(上)

    Buddy 内存管理机制(上)

    作者简介:伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享。Buddy 简介内存是计算机系统中最重要的核心资源之一,Buddy 系统是 Linux 最底层的内存管理机制,它使用 Page 粒度来管理内存。通常情况下一个 Page 的大小为 4K,在 Buddy 系统中分配、释放、回收的最小单位都是 Page。上图是 Buddy

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

    【C++初阶】C++内存管理

    文章目录一.C/C++内存分布图二.new和delete内存管理1.对于内置类型2.对于自定义类型(重点)3.new和delete不匹配问题(了解)4.new的底层机制(了解)5.定位new表达式(了解)三.面试题1.new/delete和malloc/free的区别(理解)2.内存泄漏一.C/C++内存分布图 作为C/C++方向的从业者,必须关注的四块空间: 栈(局部数据)堆(动态申请数据)数

    日期 2023-06-12 10:48:40     
  • rust写操作系统 rCore tutorial 学习笔记:实验指导二 内存分配与管理

    rust写操作系统 rCore tutorial 学习笔记:实验指导二 内存分配与管理

    这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily这里参考的是rCore tutorial的第三版:https://github.com/rcore-os/rCore-Tutoriallab2 学习报告这

    日期 2023-06-12 10:48:40     
  • JVM垃圾回收器详解:串行回收新生代内存管理垃圾回收的触发机制

    JVM垃圾回收器详解:串行回收新生代内存管理垃圾回收的触发机制

    垃圾回收的触发机制在讨论新生代垃圾回收之前,首先要解决的问题就是:谁能触发垃圾回收?何时触发垃圾回收?从垃圾回收的角度来说,既可以进行主动回收,也可以进行被动回收。主动回收指的是GC工作线程发现内存不足时主动发起垃圾回收动作,被动回收指的是Mutator在对象分配的时候发现内存不足,由Mutator触发GC工作线程执行垃圾回收动作。主动进行回收需要额外的处理,判断何时启动垃圾回收,实现比较复杂;被

    日期 2023-06-12 10:48:40     
  • 【JavaScript】垃圾回收与内存管理(内存优化)

    【JavaScript】垃圾回收与内存管理(内存优化)

    由于JavaScript借鉴了Java的内存管理方案,因而JavaScript与Java的垃圾回收策略是一样的。1. 垃圾回收原理Java和JavaScript都是是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存,通过自动内存分配管理实现内存分配和闲置资源回收。基本思路很简单:确定哪个变量不再使用,然后释放它占用的内存。这个过程是周期性的,即垃圾回收程序每个一段时间(或者说在代码执行

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

    Linux内存管理

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

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

    【动态内存管理】

    动态内存管理1. 为什么存在内存分配2. 动态内存函数的介绍2.1 malloc和free2.2 calloc2.3 realloc3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部分3.5 对同一块动态内存多次释放3.6 动态开辟内存忘记释放(内存泄漏)4. 几个经典的笔

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )

    【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )

    文章目录一、RCU 机制二、RCU 机制的优势与弊端三、RCU 机制的链表应用场景一、RCU 机制RCU , 英文全称是 " Read-Copy-Update “ , 对应的中文名称是 ” 读取-拷贝-更新 “ , 这是 Linux 内核中的 ” 同步机制 " ;Linux 内核中还有其它同步机制 , 如 " 原子操作 " , " 读写信号量 &q

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】Linux 内核堆内存管理 ③ ( CPU 计数器瓶颈 | per-CPU 计数器 | Linux 内核 percpu_counter 结构体源码 )

    【Linux 内核 内存管理】Linux 内核堆内存管理 ③ ( CPU 计数器瓶颈 | per-CPU 计数器 | Linux 内核 percpu_counter 结构体源码 )

    文章目录一、CPU 计数器瓶颈二、per-CPU 计数器及 percpu_counter 结构体源码一、CPU 计数器瓶颈如果 操作系统 中有 多个 CPU , 假设只有一个 CPU 计数器工作 , 如果 某个 CPU 正在访问计数器 , 其它 CPU 需要等待计数器释放 , 才能访问 CPU 计数器 , 这里 CPU 计数器会出现瓶颈 , 影响系统性能 ;二、per-CPU 计数器及 percp

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

    【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

    文章目录一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )二、内核空间内存管理1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )2、sys_brk、sys_mmap 系统调用一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcm

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )

    【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )

    文章目录一、Linux 内核中的内存管理模块二、硬件设备内存管理一、Linux 内核中的内存管理模块Linux 内核还需要处理如下内容 :① 页错误异常处理② 页表管理③ 引导内存分配器 : 页分配器 , 块分配器 , 不连续页分配器 , 连续内存分配器 , 每处理器内存分配器 ;" 页分配器 " 负责分配 内存物理页 , 使用的是 " 伙伴分配器 " ;&

    日期 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 结构体成员分析 | hiwater_rss | start_code | start_brk )

    【Linux 内核 内存管理】虚拟地址空间布局架构 ④ ( 内存描述符 mm_struct 结构体成员分析 | hiwater_rss | start_code | start_brk )

    文章目录一、mm_struct 结构体成员分析1、hiwater_rss 成员2、hiwater_vm 成员3、total_vm 成员4、locked_vm 成员5、start_code、end_code、 start_data、 end_data 成员6、start_brk、 brk、 start_stack 成员7、arg_start、 arg_end、env_start、 env_end 成

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)

    【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)

    文章目录一、vm_area_struct 结构体成员分析二、vm_area_struct 结构体完整源码一、vm_area_struct 结构体成员分析vm_area_struct 结构体中相关成员解析 :unsigned long vm_start 成员 : 虚拟内存空间 起始地址 ; unsigned long vm_start; /* Our start address within vm

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )

    【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )

    文章目录一、物理地址空间二、外围设备寄存器三、外围设备寄存器物理地址 映射到 虚拟地址空间一、物理地址空间" 物理地址空间 “ 是 CPU 处理器 在 ” 总线 " 上 访问内存的地址 ,RISC 处理器 只能访问 物理地址空间 , 系统的 外围设备 与 物理内存 都使用 统一的物理地址空间 访问 ;RISC 全称 " Reduced Instruction Set

    日期 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 删除内存映射 | mprotect 设置虚拟内存区域访问权限 )

    【Linux 内核 内存管理】内存管理系统调用 ① ( mmap 创建内存映射 | munmap 删除内存映射 | mprotect 设置虚拟内存区域访问权限 )

    文章目录一、mmap 创建内存映射二、munmap 删除内存映射三、mprotect 设置虚拟内存区域访问权限一、mmap 创建内存映射mmap 系统调用函数 , 用于 创建 " 内存映射 " ;该 " 系统调用 " 函数工作原理如下 :首先 , 创建 " 匿名内存映射 “ , 将 ” 物理内存页 “ 映射到 进程的 ” 用户虚拟地址空间 &quo

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

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

    文章目录一、do_mmap 函数执行流程二、do_mmap 函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数 , 继续向下执行 ;在 sys_mmap_pgoff 系统调用函数 中 , 最后调用了 v

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

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

    文章目录一、mmap_region 函数执行流程1、检查内存申请是否合法2、创建 " 虚拟内存区域 "二、mmap_region 函数源码调用 mmap 系统调用 , 先检查 " 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff 函数

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

    【Linux 内核 内存管理】memblock 分配器编程接口 ④ ( memblock_alloc 函数 | memblock_alloc_base 函数 )

    文章目录一、memblock_alloc 函数分析二、memblock_alloc_base 函数分析三、__memblock_alloc_base 函数分析四、memblock_alloc_base_nid 函数分析五、memblock_alloc_range_nid 函数分析memblock 分配器提供了如下编程接口 :① 添加内存 : memblock_add 函数 , 将 内存块区域 添加

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )

    【Linux 内核 内存管理】分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )

    文章目录一、zone 结构体中水线控制相关成员 ( managed_pages | spanned_pages | present_pages )二、在 Ubuntu 中查看内存区域水位线上一篇博客 【Linux 内核 内存管理】分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 ) 中讲解了

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )

    【Linux 内核 内存管理】物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )

    文章目录一、分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask二、__alloc_pages_nodemask 函数完整源码一、分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemaskLinux 内核中 , " 分区伙伴分配器 " 有多种 物理页分配函数 , 所有的 函数 都会调用 __alloc_pages_nodemask

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】物理分配页 ⑥ ( get_page_from_freelist 快速路径调用函数源码分析 | 检查内存区域水线 | 判定节点回收 | 判定回收距离 | 回收分配页 )

    【Linux 内核 内存管理】物理分配页 ⑥ ( get_page_from_freelist 快速路径调用函数源码分析 | 检查内存区域水线 | 判定节点回收 | 判定回收距离 | 回收分配页 )

    文章目录一、检查内存区域水线二、判定节点收回是否开启、回收距离是否合法三、回收没有使用的页、再次检查区域水线四、分配物理页五、本博客涉及到的处理过程源码在 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 ) 博客中 , 分析了 __alloc_pages_nodema

    日期 2023-06-12 10:48:40     
  • 【C语言】动态内存管理(heap)

    【C语言】动态内存管理(heap)

    本文主要介绍动态内存管理的相关知识。(用心的文章往往会姗姗来迟,请大家耐心观看)前言本文介绍了动态内存的相关知识,讲解较全面,希望大家用心阅读一、内存空间的分配1.栈区:存放局部变量,函数的形式参数2.堆区:动态的内存分配空间会在堆区上开辟3.静态区:存放全局变量和静态变量(可以是全局也可以是局部)4.补充:C语言是可以创建变长数组的(也就是柔性数组),c99增加了这种语法标准,但现在还是有许多

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