zl程序教程

C内存管理

  • 深入理解Aarch64的内存管理

    深入理解Aarch64的内存管理

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

    日期 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     
  • JVM内存分配与管理详解

    JVM内存分配与管理详解

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

    日期 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     
  • 21-内存与内存管理

    21-内存与内存管理

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

    日期 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     
  • 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     
  • 【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     
  • Linux内核的内存管理与漏洞利用案例分析

    Linux内核的内存管理与漏洞利用案例分析

    本文主要介绍Buddy System、Slab Allocator的实现机制以及现实中的一些漏洞利用方法,从攻击者角度加深对Linux内核内存管理机制的理解。前言网上已经有很多关于Linux内核内存管理的分析和介绍了,但是不影响我再写一篇:) 一方面是作为其他文章的补充,另一方面则自己学习的记录、总结和沉淀。所谓条条大路通罗马,本文只作为其中一条路,强烈建议想去罗马的朋友看完文末所列举的参考文章。

    日期 2023-06-12 10:48:40     
  • 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    文章目录一. 动态内存分配1. 动态内存分配相关概念( 1 ) 动态内存分配 ( ① 变量 数组 -> 内存别名 | ② 变量 在 编译阶段 分配内存 | ③ 除了编译器分配的内存 还需额外内存 -> 动态内存 )2. 动态内存分配 相关方法( 1 ) 相关 方法简介 ( ① malloc calloc realloc 申请内存 | ② free 归还内存 | ③ malloc 申请内

    日期 2023-06-12 10:48:40     
  • 【C++修炼之路】6. 内存管理

    【C++修炼之路】6. 内存管理

    C++之内存管理本节目标1. C/C++内存分布2. C语言中动态内存管理方式:malloc/calloc/realloc/free3. C++内存管理方式(重要)3.1 new/delete操作内置类型3.2 new和delete操作自定义类型3.3 类型不匹配导致的错误3.4 new与malloc开辟空间失败的区别4. operator new与operator delete函数(重点)4.1

    日期 2023-06-12 10:48:40     
  • 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

    【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

    文章目录一、进程调度二、内存管理三、中断管理四、设备管理五、文件系统一、进程调度进程调度 :进程 是 系统中 进行 资源分配 的 基本单位 ;每个进程 在 运行时 , 都 感觉自己占有 全部硬件资源 ,实际上 , 进程 不会 长时间独占 某个资源 ,操作系统 , 利用 进程调度器 , 令 多个进程 并发执行 ;Linux 内核 没有 严格区分 进程 与 线程 ;进程管理 : 包括 进程创建 , 销

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )

    【Linux 内核 内存管理】RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )

    文章目录一、RCU 机制适用场景二、RCU 机制特点三、使用 RCU 机制保护链表一、RCU 机制适用场景在上一篇博客 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 ) 中 , 分析了 RCU 机制的优势与弊端 ;优势 : RCU 的优势是 " 读者 " ( 读取共享数据的线程 ) 不需要承担

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )

    【Linux 内核 内存管理】RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )

    文章目录一、RCU 层次架构概念及源码二、RCU 层次架构源码解析1、RCU 层次架构每层最多叶子数2、RCU 层次架构每个叶子 CPU 数量一、RCU 层次架构概念及源码RCU 机制 中 , 会 根据 CPU 数量 , 按照 " 树形结构 “ 组成 RCU 层次架构 , 称为 ” RCU Hierarchy " ;在 Linux 源码 linux-5.6.18\include

    日期 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 内核内存布局 ② ( 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 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

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

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

    日期 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     
  • C/C++内存管理

    C/C++内存管理

    目录1.C/C++内存分布2.C语言中动态内存管理方式:malloc/calloc/realloc/free3.C++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型4.operator new与operator delete函数5.new和delete的实现原理5.1 内置类型5.2 自定义类型6.定位new表达式(placement-new)7.常

    日期 2023-06-12 10:48:40     
  • 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑤ ( Linux 内核中对 “ 虚拟地址空间 “ 的描述 | task_struct 结构体源码 )

    【Linux 内核 内存管理】虚拟地址空间布局架构 ⑤ ( Linux 内核中对 “ 虚拟地址空间 “ 的描述 | task_struct 结构体源码 )

    文章目录一、Linux 内核中对 " 虚拟地址空间 " 的描述二、task_struct 结构体源码一、Linux 内核中对 " 虚拟地址空间 " 的描述进程 的 " 虚拟地址空间 " 由 mm_struct 和 vm_area_struct 两个数据结构描述 ;mm_struct 是 “最高层次 " 上描述 ” 整个虚拟地址空

    日期 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_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 结构体 | task_struct、mm_struct、vm_area_struct 3 个结构体之间的关系)

    【Linux 内核 内存管理】内存映射相关数据结构 ① ( vm_area_struct 结构体 | task_struct、mm_struct、vm_area_struct 3 个结构体之间的关系)

    文章目录一、vm_area_struct 结构体二、task_struct 进程描述符、mm_struct 内存描述符、vm_area_struct 虚拟内存区间 之间的关系一、vm_area_struct 结构体在 Linux 内核中 , 使用 vm_area_struct 结构体描述 " 进程 " 的 " 用户虚拟地址空间 " 的 地址区间 ;vm_ar

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

    【Linux 内核 内存管理】内存映射相关数据结构 ⑤ ( vm_area_struct 结构体成员分析 | vm_pgoff 成员 | vm_file 成员 | vm_private_data )

    文章目录一、vm_area_struct 结构体成员分析1、vm_pgoff 成员2、vm_file 成员3、vm_private_data 成员二、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 删除内存映射 )

    【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 内存映射示例 )

    【Linux 内核 内存管理】内存管理系统调用 ⑤ ( 代码示例 | 多进程共享 mmap 内存映射示例 )

    文章目录一、进程一描述二、进程二描述三、mmap 进程共享内存展示一、进程一描述在上一篇博客 【Linux 内核 内存管理】内存管理系统调用 ④ ( 代码示例 | mmap 创建内存映射 | munmap 删除内存映射 ) 中 , 完成了 进程一 的程序 ,在该进程中 , 创建并打开文件 , 为该文件设置大小 ,使用 mmap 创建 " 文件映射 " , 并通过直接访问内存的方

    日期 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 内核 内存管理】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