zl程序教程

内存管理[1]

  • 从零开始学习UCOSII操作系统12–内存管理

    从零开始学习UCOSII操作系统12–内存管理

    大家好,又见面了,我是你们的朋友全栈君。 从零开始学习UCOSII操作系统12–内存管理 前言: 在标准的C语言中,可以用malloc()和free()2个动态的分配内存和 释放内存,但是在嵌入式中,调用malloc()和free()却是非常危险的。 因为多次调用这两个函数,会把原来的很大的一块连续的内存区域逐渐的分割成许多非常小的而且彼此又不相邻的内存块,也就是所谓的内存碎片。这样子的话,

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

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

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

    日期 2023-06-12 10:48:40     
  • 存储类别、链接和内存管理(二)

    存储类别、链接和内存管理(二)

    上期我们介绍了作用域、链接和存储期。这期我们继续介绍。 一、自动变量 自动存储类别的变量具有自动存储期、块作用域且无链接。默认情况下,声明在块或函数头中的任何变量都属于自动存储类别。使用auto作为存储类别说明符。再复习一下:无链接意味着这些变量属于定义它们的块、函数或原型私有。 二、寄存器变量 在函数头中使用关键字register,便可请求寄存器变量。它们都是块作用域、无链接和自

    日期 2023-06-12 10:48:40     
  • 内存管理专栏 | 之内存管理架构

    内存管理专栏 | 之内存管理架构

    一、内存管理架构二、虚拟地址空间布局架构三、物理内存体系架构四、内存结构五、内存模型六、虚拟地址和物理地址的转换七、内存映射原理分析一、内存管理架构内存管理子系统架构可以分为:用户空间、内核空间及硬件部分3个层面,具体结构如下所示:1、用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源。2、内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用

    日期 2023-06-12 10:48:40     
  • 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     
  • linux内存管理之 ION 内存管理器浅析Ⅱ(system contig heap)

    linux内存管理之 ION 内存管理器浅析Ⅱ(system contig heap)

    大家好,又见面了,我是你们的朋友全栈君。目录1 system contig heap 与 system heap2 system contig heap创建3 system contig heap内存分配4 system contig heap内存释放1 system contig heap 与 system heap从代码中我们看到system contig heap与system heap同属

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

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

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

    日期 2023-06-12 10:48:40     
  • 走进vpp物理内存管理的世界(1)

    走进vpp物理内存管理的世界(1)

    这篇文章标题已经写很久了,最近时间一直忙工作上事情,搁浅了很长一段时间。每次阅读到vpp对物理内存的管理这块都会绕过。终于鼓起勇气要来阅读一番。自己的理解也比较狭隘,比如通过/proc/pid/pagemap将虚拟地址查询到物理地址,本人也没有完全理解(参照其他人博客)。欢迎大家指正和交流。 物理内存命令行 这块也一直不知道从何入手,先介绍一下物理内存相关的命令行吧。 代码在src/vlib

    日期 2023-06-12 10:48:40     
  • DPDK 内存管理---malloc_heap和malloc_elem

    DPDK 内存管理---malloc_heap和malloc_elem

    博文是基于dpdk20.5代码阅读所写,如理解有错误或不当之处,烦请指正,不甚感激。也可以私信我一起探讨。两种数据结构体介绍Malloc 库内部使用了两种数据结构类型(可以参考dpdk官方文档3.4.4章节介绍):struct malloc_heap:用于在每个 CPU Socket 上跟踪和管理可用内存空间。全局变量rte_config.mem_config->malloc_heaps[3

    日期 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     
  • Buddy 内存管理机制(上)

    Buddy 内存管理机制(上)

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

    日期 2023-06-12 10:48:40     
  • 【动态内存管理】malloc&calloc和realloc和笔试题和柔性数组

    【动态内存管理】malloc&calloc和realloc和笔试题和柔性数组

    目录0 为什么存在动态内存管理?1 malloc函数2  calloc函数 3 realloc函数5 2道经典的笔试题:0 为什么存在动态内存管理?char str[20]={0]; int arr[20]={0};复制上述的空间开辟的方式有两个特点:空间开辟空间的大小是固定的数组在申明的时候必须指定数组空间的大小,它在编译时分配所需要的内存但是如果我们所需要的空间大小在程序编译时并不确定,而是到

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

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

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

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

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

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

    日期 2023-06-12 10:48:40     
  • 【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化

    【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化

    1. 应用优化前面章节,我们介绍了很多数据库的优化措施。但是在实际生产环境中,由于数据库本身的性能局限,就必须要对前台的应用进行一些优化,来降低数据库的访问压力。1.1 使用连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立 数据库连接池,以提高访问的性能。1.2 减少对MySQL的访问1.2.1 避免对数据进行重复检索在编写应用代码

    日期 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 内核 没有 严格区分 进程 与 线程 ;进程管理 : 包括 进程创建 , 销

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )

    【Linux 内核 内存管理】Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )

    文章目录一、查看 x86_64 架构体系内存分布二、/proc/meminfo 重要字段解析一、查看 x86_64 架构体系内存分布执行cat /proc/meminfo复制命令 , 可以查看 " x86_64 架构体系内存分布 " ;执行结果参考 :root@ubuntu:~/kernel/linux-5.6.14# cat /proc/meminfo MemTotal:

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】内存管理架构 ⑤ ( sbrk 内存分配系统调用代码示例 | 在 /proc/pid/maps 中查看进程堆内存详情 )

    【Linux 内核 内存管理】内存管理架构 ⑤ ( sbrk 内存分配系统调用代码示例 | 在 /proc/pid/maps 中查看进程堆内存详情 )

    文章目录一、sbrk 内存分配系统调用代码示例二、在 /proc/pid/maps 中查看进程堆内存详情本篇博客调用 sbrk 系统调用函数 , 申请并修改 堆内存 , 并在 /proc/pid/maps 中查看该进程的 堆内存 ;一、sbrk 内存分配系统调用代码示例sbrk 系统调用函数 , 作用是 修改程序 BSS 段大小 ;函数原型如下 :#include <unistd.h>

    日期 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 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )

    【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )

    文章目录一、vm_area_struct 结构体成员分析1、vm_mm 成员2、vm_page_prot 成员3、vm_flags 成员二、vm_area_struct 结构体完整源码在之前的博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)

    日期 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 创建内存映射 | 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 内核 内存管理】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 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

    【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

    文章目录一、物理页 page 简介1、物理页 page 引入2、物理页 page 与 MMU 内存管理单元3、物理页 page 结构体4、Linux 内核源码中的 page 结构体二、内存节点 pglist_data 与 物理页 page 联系内存管理系统 3级结构 :① 内存节点 Node ,② 内存区域 Zone ,③ 物理页 Page ,Linux 内核中 , 使用 上述 3 级结构 描述

    日期 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 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )

    【Linux 内核 内存管理】memblock 分配器 ⑤ ( Linux 内核中定义 memblock 分配器的位置 | ARM64体系架构下 Linux内核初始化 memblock 分配器流程 )

    文章目录一、Linux 内核中定义 memblock 分配器的位置二、ARM64 体系架构下 Linux 内核初始化 memblock 分配器流程三、arm64_memblock_init 函数完整源码一、Linux 内核中定义 memblock 分配器的位置Linux 内核 定义 memblock 分配器 位置 :Linux 内核源码 linux-4.12\mm\memblock.c#34 位置

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

    【Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

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

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

    【Linux 内核 内存管理】memblock 分配器编程接口 ② ( memblock_add_range 函数分析 | memblock_insert_region 函数分析 )

    文章目录一、memblock_add_range 函数原型分析二、memblock_add_range 函数源码分析三、memblock_insert_region 函数原型分析四、memblock_add_range 函数源码一、memblock_add_range 函数原型分析在 memblock_add 函数 中 , 调用 memblock_add_range 函数 插入了一块内存 ;mem

    日期 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