[项目][CMP][项目介绍及知识铺垫]详细讲解

news2024/11/15 12:19:47

目录

  • 1.这个项目做的是什么?
  • 2.此项目涉及知识面
  • 3.什么是内存池?
    • 1.池化技术
    • 2.内存池
    • 3.内存池主要解决的问题
  • 4.理解malloc


1.这个项目做的是什么?

  • 实现一个高并发内存池,参考原型为Google的一个开源项目tcmalloc(Thread-Caching Malloc)
    • 线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)
  • 此项目是把tcmalloc最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,以供学习
  • tcmalloc源代码

2.此项目涉及知识面

  • C/C++、数据结构(链表、哈希桶)、操作系统内存管理、单例模式、多线程、互斥锁

3.什么是内存池?

1.池化技术

  • 程序先向系统申请过量的资源,然后自己管理,以备不时之需
  • 之所以要申请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好了,使用时就会变得非常方便快捷,大大提高程序运行效率
  • 计算机中,很多使用"池"这种技术的地方,比如内存池、连接池、线程池、对象池等

2.内存池

  • 内存池是指程序预先从操作系统申请一块足够大内存,此后,当程序中需要申请内存的时候,不是直接向操作系统申请,而是直接从内存池中获取
  • 同理,当程序释放内存的时候,并不真正将内存返回给操作系统,而是返回内存池
  • 当程序退出(或者特定时间)时,内存池才将之前申请的内存真正释放

3.内存池主要解决的问题

  • 内存池主要解决效率问题,其次如果作为系统的内存分配器的角度,还需要解决一下内存碎片的问题

  • 什么是内存碎片?(外碎片)

    • 如下图
    • 此时有384byte空间,但是因为要申请超过256byte的空间却申请不出来,因为这两块空间碎片化,不连续了
      请添加图片描述
  • 内存碎片

    • 外碎片
      • 一些空闲的连续内存区域太小,这些内存空间不连续,以至于合计的内存足够,但是不能满足一些的内存分配申请需求。
    • 内碎片
      • 由于一些对齐的需求,导致分配出去的空间中一些内存无法被利用

4.理解malloc

  • C/C++中要动态申请内存都是通过malloc去申请内存,但是我们实际不是直接去堆获取内存的,而malloc就是一个内存池

  • malloc()相当于向操作系统"批发"了一块较大的内存空间,然后"零售"给程序用,当全部"售完"或程序有大量的内存需求时,再根据实际需求向操作系统"进货"

  • malloc的实现方式有很多种,一般不同编译器平台用的都是不同的

    • 比如Windows的vs系列用的微软自己写的一套
    • Linux gcc用的glibc中的ptmalloc
      请添加图片描述
  • 一文了解,Linux内存管理,malloc、free 实现原理

  • malloc()背后的实现原理 – 内存池

  • malloc的底层实现(ptmalloc)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

61、Python之函数高级:为函数添加方法,实现属性可变的装饰器

引言 今天文章的标题,初读起来可能有些拗口,什么叫“为函数添加方法”?但是,如果真正对“Python函数也是对象”这个理念有清晰的理解的话,其实,也是不难理解的,本质上就是给一个对象新增一个自…

通用代码生成器还可以这么用,将MariaDB数据库连数据迁徙到PostgreSQL

通用代码生成器是一种非常方便的软件开发工具,除了简单直接的生成代码,制作快速原型以外。通用代码生成器还可以应用在各种场景上。比如可以使用通用代码生成器,将MariaDB数据库连数据迁徙到PostgreSQL。操作并不复杂,却十分适用。…

【学习笔记】SSL证书之混合加密(Hybrid Encryption)与签名(Signatures)

1、非对称密钥对可以用来进行加密(Confidentiality保密性) 举个栗子,现在有2个人,Pam和Jim,两人之间需要通过非对称密钥对来给另一方发送数据。Pam通过某种途径将公钥分享给Jim,两人都各自保存着自己的私钥…

算法打卡 Day29(回溯算法)-复原 IP 地址 + 子集 + 子集 Ⅱ

文章目录 Leetcode 93-复原 IP 地址题目描述解题思路 Leetcode 78-子集题目描述解题思路 Leetcode 90-子集 Ⅱ题目描述解题思路 Leetcode 93-复原 IP 地址 题目描述 https://leetcode.cn/problems/restore-ip-addresses/description/ 解题思路 这是一道切割问题,…

【ShuQiHere】“初识人工智能:智能机器的基础入门”

1.1. 引言 (Introduction) 🧠🤖 人工智能(Artificial Intelligence, AI) 是计算机科学的一个分支,目标是让计算机或机器具备像人类一样的智能。自计算机发明以来,计算机执行各种任务的能力呈指数增长。随着…

思科IP访问控制列表2

#网络安全技术实现# #任务二标准访问控制列表的控制2# #1配置计算机的IP 地址、子网掩码和网关 #2配置Router-A的主机名称和接口IP地址 Router>enable Router#config t Router(config)#hostname Router-A Router-A(config)#int g0/0 Router-A(config-if)#ip add 192.1…

iKun主页 最新2.0版本 无需数据库 带页面音乐版本~

源码介绍 iKun主页 最新2.0版本 无需数据库 带页面音乐版本~ 无需数据库,没有后台 记事本修改里面的内容即可 效果预览 源码获取 iKun主页 最新2.0版本 无需数据库 带页面音乐版本~

Seataf分布式事务的使用

一、事务的四大特征(面试题) 原子性:一个事务是不可分割的,要不都做,要不都不做一致性:事务必须是使数据库从一个一致性变成另一个一致性状态隔离性:一个事务的执行不被其他事务干扰&#xff0…

比较.NET框架中的IEnumerable和IQueryable性能差异的核心原理

1. 前言&#xff1a; 思考下这两份代码在性能上有哪些差异&#xff0c;如果你能很清楚的区分&#xff0c;那么可以跳过本文的内容。如果你还比较模糊不清楚其中的原理&#xff0c;那么可以花个几分钟了解下。 示例一&#xff1a; IEnumerable<Order> orders GetOrder…

C语言 | Leetcode C语言题解之第386题字典序排数

题目&#xff1a; 题解&#xff1a; int* lexicalOrder(int n, int* returnSize){int *ret (int *)malloc(sizeof(int) * n);int number 1;for (int i 0; i < n; i) {ret[i] number;if (number * 10 < n) {number * 10;} else {while (number % 10 9 || number 1 …

日志系统前置知识

日志&#xff1a;程序运行过程中所记录的程序运行状态信息。通过这些信息&#xff0c;以便于程序员能够随时根据状态信息&#xff0c;对系统的运行状态进行分析。功能&#xff1a;能够让用户非常简便的进行日志的输出以及控制。 同步写日志 同步日志是指当输出日志时&#xff…

【Python百日进阶-Web开发-音频】Day707 - 时域处理 librosa.autocorrelate

文章目录 一、时域处理1.1 librosa.autocorrelate1.1.1 语法与参数1.1.2 例子1.1.2.1 计算完全自相关y1.1.2.2 计算长达 4 秒的起始强度自相关 一、时域处理 1.1 librosa.autocorrelate https://librosa.org/doc/latest/generated/librosa.autocorrelate.html 1.1.1 语法与参…

3. GIS后端工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs

828华为云征文&#xff5c;华为云Flexus X实例docker部署MinIO对象存储系统obs 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求&#xff0c;一定…

【Linux网络编程八】实现最简单Http服务器(基于Tcp套接字)

基于TCP套接字实现一个最简单的Http服务器 Ⅰ.Http请求和响应格式1.请求格式2.响应格式3.http中请求格式中细节字段4.http中响应格式中细节字段 Ⅱ.域名ip与URLⅢ.web根目录Ⅳ.Http服务器是如何工作的&#xff1f;一.获取请求二.分析请求2.1反序列化2.2解析url 三.构建响应3.1构…

虚拟机的安装-详细教程

目录 新建虚拟机 选择典型 安装操作系统 选择CentOS7 64位版本 虚拟机存放位置 磁盘容量 完成 编辑虚拟机 修改内存大小 设置处理器个数 选择镜像 开启虚拟机 进入界面&#xff0c;回车 选择语言 安装类型 磁盘分区 开启网络 设置密码和用户 重启 接受许可…

鸿蒙(API 12 Beta6版)图形【使用Text模块实现文本显示】方舟2D图形服务

场景介绍 ohos.graphics.text模块提供了接口创建复杂的文本段落&#xff0c;包括多样的文本样式、段落样式、换行规则等&#xff0c;并最终将这些信息转换为能在屏幕上高效渲染的布局数据。 接口说明 ohos.graphics.text常用接口如下表所示。 接口名描述pushStyle(textStyl…

【算法】单词出现次数和位置统计

【算法】单词出现次数和位置统计 题目描述 编写一个程序&#xff0c;用于统计一个给定单词在一段文本中出现的次数以及第一次出现的位置。如果单词在文本中出现&#xff0c;则输出出现次数和第一次出现的位置&#xff08;位置从0开始计算&#xff09;。如果单词没有出现&…

我完成第一个AI项目的全过程记录——对IMDB电影评论的情感分析

前言 这是我用时两天完成的第一个AI项目。 我的代码和运行结果放在kaggle上面&#xff0c;地址&#xff1a; Sentiment Analysis of IMDB Movie Reviews (90%&#xff09; 我参考的原作者kaggle项目地址&#xff1a;Sentiment Analysis of IMDB Movie Reviews 我如何选择的这个…

InstantX团队新作!基于端到端训练的风格转换模型CSGO

由InstantX团队、南京理工大学、北京航空航天大学以及北京大学联合提出了一种基于端到端训练的风格转换模型 CSGO&#xff0c;它采用独立的特征注入明确地解耦内容和风格特征。统一的 CSGO 实现了图像驱动的风格转换、文本驱动的风格化合成和文本编辑驱动的风格化合成。大量实验…