一、项目介绍 二、什么是内存池?

news2024/11/20 11:42:56

目录

  • 一、项目介绍
    • 这个项目是做什么的?
  • 二、什么是内存池?
    • 2.1 什么是池化技术?
    • 2.2 内存池
    • 2.3 内存池主要解决什么问题?
    • 2.4 malloc

一、项目介绍

这个项目是做什么的?

当前项目是实现一个高并发的内存池,它的原型是google的一个开源项目TCmalloc,TCmalloc全称是Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)。
这个项目是把TCmalloc最核心的框架简化后拿出来,模拟实现出一个自己的mini版的高并发内存池,目的就是学习TCamlloc的精华部分,而并非造一个更好的轮子。

二、什么是内存池?

2.1 什么是池化技术?

所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己管理,以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好了,这样使用时就会变得非常快捷,大大提高程序运行效率。就好比我们上大学时问父母要生活费,也是一次就要一个月的生活费而并非每天都找父母要一次生活费。
其实在计算机中,有很多使用“池”这种技术的地方,除了内存池,还有连接池、线程池、对象池等。以服务器上的线程池为例,它的主要思想是:先启动若干数量的线程,让它们处于睡眠状态,当接收到客户端的请求时,唤醒池中某个睡眠的线程,让它来处理客户端的请求,当处理完这个请求,线程又进入睡眠状态,以上都是池化技术的一些应用场景。

2.2 内存池

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

2.3 内存池主要解决什么问题?

1、首先,内存池解决的最主要问题肯定还是效率问题,使用内存池有助于提高效率。
2、其次,内存池还能解决内存碎片的问题,何为内存碎片?内存碎片分为内碎片和外碎片内碎片主要是因为内存对齐而导致的,而外碎片是:例如有一块大内存的前100个字节被函数1申请开辟了,中间100字节被函数2申请开辟了,后100个字节被函数3申请开辟了,这时函数1和函数3调用结束,释放了这块内存的前100个字节和后100个字节,那么现在有200个字节,但是当函数4想要申请200个字节的内存时却申请不出来,原因是申请的一块内存必须是连续的,而正因为这200个字节的内存不连续,所以虽然是有200个字节的内存,但是却申请不到200字节的内存出来,这个就称为外碎片。
在这里插入图片描述
简单来说就是外碎片是一些空闲的连续内存区域太小,这些内存空间不连续,以至于合计的内存足够,但是不能满足一些的内存分配申请需求。内碎片是由于一些对齐的需求,导致分配出去的空间中一些内存无法被利用。

2.4 malloc

C/C++中我们要动态申请内存都是通过malloc去申请内存,但是我们要知道,实际我们不是直接去堆获取内存的,而是malloc本身就是一个内存池。malloc() 相当于向操作系统申请了一块较大的内存空间,然后按需分给程序用。当这个大块内存全部用完或程序有大量的内存需求时,再根据实际需求向操作系统申请内存。malloc的实现方式有很多种,一般不同编译器平台用的都是不同的。比如windows的vs系列用的是微软自己写的一套,
linux gcc用的glibc中的ptmalloc。

在这里插入图片描述

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

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

相关文章

时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测

时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测; 2.运行环境…

lv3 嵌入式开发-2 linux软件包管理

目录 1 软件包管理 1.1流行的软件包管理机制 1.2软件包的类型 1.3软件包的命名 2 在线软件包管理 2.1APT工作原理 2.2更新软件源 2.3APT相关命令 3 离线软件包管理 1 软件包管理 1.1流行的软件包管理机制 Debian Linux首先提出“软件包”的管理机制---Deb软件包 …

【python爬虫】10.指挥浏览器自动工作(selenium)

文章目录 前言selenium是什么怎么用设置浏览器引擎获取数据解析与提取数据自动操作浏览器 实操运用确认目标分析过程代码实现 本关总结 前言 上一关,我们认识了cookies和session。 分别学习了它们的用法,以及区别。 还做了一个项目:带着小…

酒店报修系统应该怎么选?“的修”报修管理软件有什么优势?

随着酒店行业的快速发展,酒店之间的竞争也日益激烈。在竞争激烈的市场中,酒店的设备和设施的维修与管理对于酒店的运营和管理至关重要。一旦设备和设施出现故障,不仅会影响酒店的正常运营和服务质量,还会对酒店的声誉和经济效益造…

Linux 操作系统实战视频课 - GPIO 基础介绍

文章目录 一、GPIO 概念说明二、视频讲解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 GPIO 。 一、GPIO 概念说明 ARM 平台中的 GPIO(通用输入/输出)是用于与外部设备进行数字输入和输出通信的重要硬件接口。ARM 平台的 GPIO 特性可以根据具体的芯…

8月《中国数据库行业分析报告》已发布,聚焦数据仓库、首发【全球数据仓库产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生…

多因素认证与身份验证:分析不同类型的多因素认证方法,介绍如何在访问控制中使用身份验证以增强安全性

随着数字化时代的到来,信息安全问题变得愈发重要。在网络世界中,用户的身份往往是保护敏感数据和系统免受未经授权访问的第一道防线。单一的密码已经不再足够,多因素认证(MFA)应运而生,成为提升身份验证安全…

老白菜U盘重装系统工具

我使用的版本: 老白菜u盘启动盘制作工具_u盘启动_u盘装系统下载尽在老白菜官网 使用智能模式制作U盘启动盘 系统盘制作成功后的样子,将该U盘插入到要升级系统的电脑上,开机即可进入U盘系统。

基于Cadence Allegro无盘设计操作流程

无盘设计 1.因为过孔具有电容效应,无盘设计能最大限度保证阻抗连续性,从而减小反射与插损; 2.减缓走线压力,降低产品成本与风险; SetupConstraintsModelSpacing Models勾选Hole to line SetupUnused Pads Su…

SQL Server如何新建作业

作业: 在 SQL Server 中,作业(Job)是一组可以在预定时间自动执行的任务。可以将作业看作是一个可以在后台运行的程序或脚本。作业由一系列步骤组成,每个步骤都是一个独立的任务,可以执行诸如执行 SQL 查询…

工具分享 | PDF文档解析工具PyMuPDF

1 需求描述 最近工作需要从PDF文档中按照章节解析出对应的文本和图片(后续可能还会有表格),经过调研,找到了一个功能强大的解析工具MuPDF,对应的Python包是PyMuPDF。本篇博客记录使用它来实现具体功能。 官方文档:https://pymupd…

OPENCV实现暴力特征匹配

# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/1 """ import cv2 import numpy as np# 读

基于Matlab实现多个图像增强案例(附上源码+数据集)

图像增强是数字图像处理中的一个重要步骤,它通过一系列的算法和技术,使图像在视觉上更加清晰、明亮、对比度更强等,以便更好地满足人们的需求。在本文中,我们将介绍如何使用Matlab实现图像增强。 文章目录 部分源码源码数据集下载…

使用gradio库的File模块实现文件上传和生成可下载文件

使用gradio库的File模块实现文件上传和生成可下载文件 文章目录 使用gradio库的File模块实现文件上传和生成可下载文件一、背景二、介绍1、gradio简介2、File模块简介3、tempfile 模块 三、文件上传demo实战1、具体代码2、运行样例 一、背景 在用Gradio设计改写效果审核AI的de…

我的创作纪念日 —— 一年之期

前言 大家好!我是荔枝嘿~看到官方私信才发现原来时间又过去了一年,荔枝也在CSDN中创作满一年啦,虽然中间因为种种原因并没有经常输出博文哈哈,但荔枝一直在坚持创作嘿嘿。记得去年的同一时间我也同样写了一篇总结文哈哈哈&#x…

基于孔雀算法优化的BP神经网络(预测应用) - 附代码

基于孔雀算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于孔雀算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.孔雀优化BP神经网络2.1 BP神经网络参数设置2.2 孔雀算法应用 4.测试结果:5.Matlab代码 摘要…

VSCode之C++ CUDA极简环境配置

背景 想要了解CUDA并行计算原理,同时针对深度学习中出现一些“不支持算子”可能需要手写的需要,配置一个简单的CUDA编译环境,探索CUDA编程的范式【注:CUDA环境配置略】。结果展示 示例代码 #include "cuda_runtime.h" …

移动基站ip的工作原理

原理介绍 Basic Principle 先说一下概念,大家在不使用 WIFI 网络的时候,使用手机通过运营商提供的网络进行上网的时候,目前都是在用户端使用私有IP,然后对外做 NAT 转换,这样的情况就导致大家统一使用一些 IP 段进行访…

rrweb录制用户的操作过程,并上传服务端

1、客户端 准备工作,需要使用到的包有rrweb(录制) rrwebPlayer(播放) pako(压缩) 1.1、录制:1.2、pako 压缩工具的使用方式 import * as rrweb from rrweblet dispose null let rr…

SSH项目集成DM达梦数据库

接上一篇文章【Mysql数据库迁移到达梦DM】,迁移完成后,做出的调整 目录 1.需要改成DM的连接数据的方式 2.启动项目报错 3.在做插入数据操作时报错 1.需要改成DM的连接数据的方式 jdbc.usernameJDYXKSBM jdbc.passwordJDYXKSBM jdbc.urljdbc:dm://lo…