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

2024-09-05 06:52

本文主要是介绍[项目][CMP][项目介绍及知识铺垫]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 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)

这篇关于[项目][CMP][项目介绍及知识铺垫]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138251

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将