3、内存管理
存储类别、链接和内存管理(一)--面试中你遇到过static关键字吗?
halo大家好~今天我们来分享一下在有关C语言面试中我们最常被面试官问到的static关键字到底有什么用?相信学完本期内容你就会回答了~ 一、存储类别 首先我们来了解下存储类别。 从硬件方面看,每个变量存储的值都占用一定的物理内存空间,C语言中把这样一块内存称为对象。 从软件方面看,程序需要访问对象,可以通过声明变量来完成: int entity = 3;
日期 2023-06-12 10:48:40oracle自动共享内存管理(ASMM) .
大家好,又见面了,我是你们的朋友全栈君。一篇关于ASSM的好文章:http://blog.csdn.net/liyongjie/article/details/7443825oracle自动共享内存管理(ASMM) 从Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMM,即Automatic Shared Memory Management)新特性。所谓ASMM,就是指
日期 2023-06-12 10:48:40AntDB内存管理之内存上下文
1.主题说明AntDB的内存管理在开发时,使用了内存上下文机制来实现内存管理。本文就从AntDB的内存上下文机制出发,解析内存上下文的实现原理。AntDB的代码中,涉及到内存的处理时,经常会看到下面这样的代码。图1:切换内存上下文示例以及图2所示的代码。图2:在内存上下文中申请内存这与平常开发C/C++程序的内存操作方式不太一样,多多少少会让人产生一些疑惑:内存操作前后的MemoryContext
日期 2023-06-12 10:48:40虚拟存储管理技术概念_虚拟内存管理
大家好,又见面了,我是你们的朋友全栈君。 一、传统存储管理方式的特征、缺点二、虚拟存储器的定义主存和辅存共同构成了虚拟存储器。对于应用程序员来说,虚拟存储器是透明的。虚拟存储器即对磁盘存储器进行抽象,将磁盘存储器组织成一个连续的存储器,将主存看成是磁盘存储器的一个高速缓存。因此,虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。 三、访问过程的步骤(1)CPU使用虚地址时,由
日期 2023-06-12 10:48:40C动态内存管理
现在有一个需求:先输入一个整数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动态内存管理
现在有一个需求:先输入一个整数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:40DPDK 内存管理---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++内存管理来谈谈JVM的垃圾回收算法设计-下
从C和C++内存管理来谈谈JVM的垃圾回收算法设计-下引言基本概念对象GC ROOTS垃圾回收常见算法标记清除优缺点引用计数优缺点部分标记清除算法优缺点复制算法优缺点多空间复制算法标记整理(标记压缩)优缺点分代设计HotSpot具体实现跨代引用并发可行性经典垃圾回收器Serial新生代垃圾回收器ParNew新生代垃圾回收器Parallel Scavenge新生代垃圾回收器Serial Old老年代
日期 2023-06-12 10:48:40从 Java 的角度看待 Go 的内存管理| 青训营笔记
从 Java 的角度看待 Go 的内存管理| 青训营笔记这是我参与「第五届青训营」伴学笔记创作活动的第 3 天前言本系列文章试图从一名 Java 开发者(有时也会穿插其他语言)的角度窥探 Go 语言,并以注释的方式提及 Go 与 Java 的一些区别,方便 Java 开发者迅速入门 Go 语言。这是该系列的第四章,将介绍 Go 的内存管理机制。性能优化自动内存管理所谓自动内存管理,其实就是指垃圾回
日期 2023-06-12 10:48:40GPDB-内核特性-资源组内存管理机制-1
GPDB-内核特性-资源组内存管理机制-1GreenPlum有两种资源管理方法:资源队列和资源组。前期我们分析过资源队列内存相关我问题gp_vmem_protect_limit如何实现,本文介绍资源组关于内存的管理机制。1、简介资源组使GP的一种资源管理方式,能够细粒度对每个用户的资源使用进行限制,支持通过SQL语句的方式进行配置。支持三种资源限制:并发、CPU和内存。超级用户通过SQL语句在数据
日期 2023-06-12 10:48:40C/C++内存管理
内存管理C/C++内存分布C语言中动态内存管理方式C++中动态内存管理new与delete对于自定义类型的动态管理operator new与operator delete函数new和delete的实现原理定位newmalloc/free和new/delete的区别内存泄漏C/C++内存分布对于C/C++计算机是这样分配内存的: 计算为什么要分配就像国内的某个省里面有很多地区,不同的地区做不同
日期 2023-06-12 10:48:40【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )
文章目录一、优化屏障 ( 编译器优化 | CPU 执行优化 )二、优化屏障源码一、优化屏障 ( 编译器优化 | CPU 执行优化 )" 代码 “ 编译成 ” 可执行文件 “ , 执行该 可执行文件 时 , 二进制指令 的 ” 执行顺序 " , 与 源码 的指令顺序 并不是完全一致的 , 为了提高 " 可执行文件 " 的执行性能 , 会对程序中的 "
日期 2023-06-12 10:48:40【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )
文章目录一、内存屏障二、编译器屏障三、处理器内存屏障一、内存屏障内存屏障 , 又称为 " 屏障指令 " , 用于保证 " 编译器 “ 或 ” CPU “ 访问内存时 , 保证 按照顺序执行 , 即 ” 内存屏障 之前 “ 的指令 与 ” 内存屏障 之后 " 的指令 不会犹豫 编译器 和 CPU 优化导致 顺序混乱 ;" 指令 " 优化主要
日期 2023-06-12 10:48:40【Linux 内核 内存管理】优化内存屏障 ④ ( 处理器内存屏障 | 八种处理器内存屏障 | 通用内存屏障 | 写内存屏障 | 读内存屏障 | 数据依赖屏障 | 强制性内存屏障 |SMP内存屏障 )
文章目录一、处理器内存屏障二、Linux 内核处理器内存屏障一、处理器内存屏障" 处理器内存屏障 “ 针对 ” CPU " 之间的内存访问乱序 和 CPU 访问外设乱序 问题 ;为了 提高 " 流水线 " 性能 , 新式处理器可以采用 " 超标量 体系结构 “ 和 ” 乱序执行 " 技术 , 可以在 一个时钟周期 中 并行执行多条指令 ;
日期 2023-06-12 10:48:40【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )
文章目录一、查看 Linux 操作系统位数二、查看 Linux 操作系统软硬件信息一、查看 Linux 操作系统位数在 64 位的 Linux 中 ,使用 48 位 表示 " 虚拟地址空间 " ;使用 45 位 表示 " 物理地址空间 " ;执行getconf LONG_BIT复制命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;
日期 2023-06-12 10:48:40【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 内核中的内存管理模块Linux 内核还需要处理如下内容 :① 页错误异常处理② 页表管理③ 引导内存分配器 : 页分配器 , 块分配器 , 不连续页分配器 , 连续内存分配器 , 每处理器内存分配器 ;" 页分配器 " 负责分配 内存物理页 , 使用的是 " 伙伴分配器 " ;&
日期 2023-06-12 10:48:40【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 结构体源码 | 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 结构体 | 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_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 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
文章目录一、vm_area_struct 结构体成员分析1、shared 成员2、anon_vma_chain 成员3、anon_vma 成员二、vm_area_struct 结构体完整源码在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb)
日期 2023-06-12 10:48:40【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 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 )
文章目录一、伙伴分配器引入二、页块、阶三、伙伴一、伙伴分配器引入Linux 内核 初始化 完成之后 , 就会 丢弃 引导内存分配器 , 如 : bootmem 分配器 , memblock 分配器 ;此时 , 使用 " 页分配器 “ 管理 ” 物理页 " ," 伙伴分配器 “ 就是 ” 页分配器 " , 其特点是 算法简单 , 性能高效 ;二、页块、阶伙伴分
日期 2023-06-12 10:48:40【Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )
文章目录一、free_area 空闲区域结构体源码分析二、分配标志位三、GFP_ZONE_TABLE 标志位区域类型映射表四、分配标志位对应的内存区域类型一、free_area 空闲区域结构体源码分析上一篇博客 【Linux 内核 内存管理】分区伙伴分配器 ① ( 分区伙伴分配器源码数据结构 | free_area 空闲区域数组 | MAX_ORDER 宏定义 | 空闲区域的页最大阶数 ) 中 ,
日期 2023-06-12 10:48:40【Linux 内核 内存管理】分区伙伴分配器 ③ ( 备用内存区域列表 | ZONELIST_FALLBACK 枚举 | zoneref 结构体 | 备用内存区域借用物理页规则 )
文章目录一、备用内存区域列表二、ZONELIST_FALLBACK、ZONELIST_NOFALLBACK 枚举三、zoneref 结构体四、备用内存区域借用物理页规则一、备用内存区域列表假如 首选 内存节点 或 内存区域 不能满足 内存分配请求 ,就需要从 " 备用内存区域 " 借用 物理页 进行 内存分配 , 该操作需要遵守如下算法规则 ;" 内存节点 "
日期 2023-06-12 10:48:40【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 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 )
文章目录一、__alloc_pages_nodemask 函数参数分析二、 __alloc_pages_nodemask 函数分配物理页流程一、__alloc_pages_nodemask 函数参数分析__alloc_pages_nodemask 函数 定义在 Linux 内核源码的 linux-4.12\mm\page_alloc.c#4003 位置 , 函数原型如下 :① gfp_t gfp_
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理分配页 ⑧ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 获取首选内存区域 | 异步回收内存页 | 最低水线也分配 | 直接分配 )
文章目录一、获取首选内存区域二、异步回收内存页三、最低水线也分配四、直接分配内存在 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 ) 博客中 , 分析了 __alloc_pages_nodemask 函数分配物理页流程如下 :首先 , 根据 gfp_t gfp_ma
日期 2023-06-12 10:48:40【Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )
文章目录一、retry 标号代码分析二、retry 标号完整代码在 【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 ) 博客中 , 分析了 __alloc_pages_nodemask 函数分配物理页流程如下 :首先 , 根据 gfp_t gfp_mask 分配标志位
日期 2023-06-12 10:48:40[C语言]动态内存管理与柔性数组
动态内存管理与柔性数组::动态内存:定义数组开辟内存的缺陷:1.开辟空间的大小固定.2.数组在定义的时候,必须指定数组的长度.动态内存开辟的原因:1.程序不知道要使用多少对象.例如:容器类2.程序不知道所需对象的准确类型.3.程序需要在多个对象间共享数据.例如:智能指针动态内存函数的介绍mallocmalloc 头文件为#include<stdlib.h> 如果开辟成功 则返回一个指向
日期 2023-06-12 10:48:40