【tcmalloc】优化方法

一.脱离new使用定长内存池

此项目本意是脱离malloc的使用,但若使用new的话仍然会使用到malloc。因为centralcache和pagecache本身是单例,不考虑创建对象的问题,但是每个线程自身拥有个线程缓冲区和span结构是要考虑new的问题的,引入定长内存池替换new可一提高效率。

二.释放内存的时候不传入对象大小

我们在释放的时候可以拿到内存块的真实物理地址,我们可以通过物理地址找到页号,在通过哈希找到对应的span块。因为所有的span块都是在centralcache统一切分的。所以一整块span块的切分的自由链表内存是固定的。只要在span块内增加一个变量记录对象大小,就可以直接通过span块获得到当前对象的大小。同时大于128页的内存申请我们按照span块的方式去申请也可以通过同样的方式获取到申请的内存大小。

这会导致一个新的问题,我们的哈希映射多次重复使用但没有加锁,在写的时候其实是加了锁的,因为centralcache获取新的span块,和pagecache内部找剩余的大块span的操作都是加了锁的。但是我们的读操作并没有加锁,比如在释放的环节我们要先通过哈希映射拿到释放大小,这时候就有可能发生读写冲突问题,所以我们要对哈希映射的模块加锁,可以采用raii或者直接使用基数树。

三,通过基数树优化哈希映射

通过性能测试可以知道,大部分耗时间都集中在哈希查找的过程中和加锁的过程。采用基数树,相当于空间换取时间,直接定值法,可以用一层或者两层的,对于64 位下则必须使用三层基数树。单层举例,因为32位下一页8k也就是13位,就会产生2^(32-13)=2^19个页号,若是64为就会有2^51个页,乘上映射的指针大小4后就会爆栈,若是多层的因为低下的层不用全部加载,所以省空间。

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

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

相关文章

springboot实现发送邮件开箱即用

springboot实现发送邮件开箱即用 环境依赖包yml配置Service层Controller层测试 环境 jdk17 springboot版本3.2.1 依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><ver…

docker构建镜像及项目部署

文章目录 练习资料下载一、docker基础1. 基本概念2. docker常见命令3. 命令别名4. 数据卷 二、docker自定义镜像1. 了解镜像结构2. 了解Dockerfile3. 构建Dockerfile文件&#xff0c;完成自定义镜像 三、网络1. docker常见网络命令2. docker自带虚拟网络3. 自定义网络 四、dock…

Oracle WebLogic Server WebLogic WLS组件远程命令执行漏洞 CVE-2017-10271

Oracle WebLogic Server WebLogic WLS组件远程命令执行漏洞 CVE-2017-10271 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议 漏洞名称 漏洞描述 在Oracle WebLogic Server 10.3.6.0.0/12.1.3.0.3/2.2.1/1.10/12.2.1.1/22.0&#xff08;Application …

简述用C++实现SIP协议栈

SIP&#xff08;Session Initiation Protocol&#xff0c;会话初始协议&#xff09;是一个基于文本的应用层协议&#xff0c;用于创建、修改和终止多媒体会话&#xff08;如语音、视频、聊天、游戏等&#xff09;中的通信。SIP协议栈是实现SIP协议的一组软件模块&#xff0c;它…

C# 使用Socket进行简单的通讯

目录 写在前面 代码实现 服务端部分 客户端部分 运行示例 总结 写在前面 在.Net的 System.Net.Sockets 命名空间中包含托管的跨平台套接字网络实现。 System.Net 命名空间中的所有其他网络访问类均建立在套接字的此实现之上。 其中的Socket 类是基于与 Linux、macOS 或 W…

Python 常用模块re

【一】正则表达式 【1】说明 正则表达式是一种强大的文本匹配和处理工具&#xff0c;主要用于字符串的模式匹配、搜索和替换。正则表达式测试网址&#xff1a;正则表达式在线测试 正则表达式手册&#xff1a;正则表达式手册 【2】字符组 字符转使用[]表示&#xff0c;并在…

音视频转码

音视频转码是指&#xff1a; 容器中音视频数据编码方式转换&#xff0c;如由H.264编码转成mpeg-4编码&#xff0c;mp3转成AAC&#xff1b;音视频码率的转换&#xff0c;如4Mb视频码率降为2Mb&#xff0c;视频分辨率的转换&#xff0c;如1080P转换为720P&#xff0c;音频重采样…

13_16-Go语言中的流程控制

**Go **语言中的流程控制 主讲教师&#xff1a;&#xff08;大地&#xff09; 合作网站&#xff1a;www.itying.com** **&#xff08;IT 营&#xff09; 我的专栏&#xff1a;https://www.itying.com/category-79-b0.html 1、Golang 中的流程控制 :::tips 流程控制是每种编…

银河麒麟桌面操作系统V10,gcc编译c程序报错:fatal error: stdio.h: 没有那个文件或目录

一、问题描述 Kylin-Desktop-V10-SP1-HWE-Release-2303-X86_64系统&#xff0c;&#xff0c;gcc编译c程序报错&#xff1a;fatal error: stdio.h: 没有那个文件或目录&#xff0c;如下&#xff1a; msms-pc:~/work/program/test$ gcc test.c test.c:1:10: fatal error: stdi…

ospf学习纪要

1、为避免区域&#xff08;area0,area1等&#xff09;间的路由形成环路&#xff0c;非骨干区域之间不允许直接相互发布区域间的路由。因此&#xff0c;所有的ABR&#xff08;Area Border Router,区域边界路由器&#xff09;都至少有一个借口属于Area0,所以Area0始终包含所有的A…

Exynos4412 移植Linux-6.1(九)移植tiny4412_backlight驱动的过程及问题解决

系列文章目录 Exynos4412 移植Linux-6.1&#xff08;一&#xff09;下载、配置、编译Linux-6.1 Exynos4412 移植Linux-6.1&#xff08;二&#xff09;SD卡驱动——解决无法挂载SD卡的根文件系统 Exynos4412 移植Linux-6.1&#xff08;三&#xff09;SD卡驱动——解决mmc0: Ti…

使用GBASE南大通用负载均衡连接池

若要使用负载均衡连接池功能&#xff0c;需要在连接串中配置相关的关键字。有关更详细的关键字信息在 GBASE南大通用 连接参数表‛中介绍。假设存在如下场景&#xff1a;  现有集群中存在 4 个节点&#xff1a; 192.168.9.173, 192.168.9.174, 192.168.9.175, 192.168.9.17…

部署后显示Bad Request The referrer header is missing.

HTTP Referer是header的一部分&#xff0c;当浏览器向web服务器发送请求的时候&#xff0c;一般会带上Referer&#xff0c;告诉服务器该网页是从哪个页面链接过来的&#xff0c;服务器因此可以获得一些信息用于处理。 因为当时需要去复制CSDN的MK格式&#xff0c;所以在HTML的头…

基于STM32单片机模拟智能电梯步进电机控制升降毕业设计3

STM32单片机模拟智能电梯步进电机控制数码管显示3 演示视频&#xff08;复制到浏览器打开&#xff09;&#xff1a; 基于STM32单片机的智能电梯控制系统模拟智能电梯步进电机控制系统设计数码管显示楼层设计/DIY开发板套件3 产品功能描述&#xff1a; 本系统由STM32F103C8T6单…

【华为机试】2023年真题B卷(python)-代表团坐车

一、题目 题目描述&#xff1a; 某组织举行会议&#xff0c;来了多个代表团同时到达&#xff0c;接待处只有一辆汽车&#xff0c;可以同时接待多个代表团&#xff0c;为了提高车辆利用率&#xff0c;请帮接待员计算可以坐满车的接待方案&#xff0c;输出方案数量。 约束: 1.一个…

龙芯loongarch64服务器编译安装tensorflow-io-gcs-filesystem

前言 安装TensorFlow的时候,会出现有些包找不到的情况,直接使用pip命令也无法安装,比如tensorflow-io-gcs-filesystem,安装的时候就会报错: 这个包需要自行编译,官方介绍有限,这里我讲解下 编译 准备 拉取源码:https://github.com/tensorflow/io.git 文章中…

关于pygame无法打开对应文件解决办法 pyame.error unable to open file

问题描述&#xff1a; 问题原因&#xff1a; 由于pygame版本过低导致无法进行声音播放&#xff0c;升级对应版本即可完成&#xff01; 解决办法&#xff1a; 升级pygame包版本到2.1.2&#xff0c;即可解决该问题&#xff01; pip install --upgrade pygame2.1.2

C语言之指针

目录 函数的参数 对象和地址 取地址运算符 注意 指针 注意 指针运算符 注意 在C语言中&#xff0c;指针是一个十分重要的概念&#xff0c;它的作用是“指示对象”。 例如&#xff1a;你要去一座公寓楼找一位朋友&#xff0c;公寓楼由很多楼层组成&#xff0c;每个楼层…

十八、本地配置Hive

1、配置MYSQL mysql> alter user rootlocalhost identified by Yang3135989009; Query OK, 0 rows affected (0.00 sec)mysql> grant all on *.* to root%; Query OK, 0 rows affected (0.00 sec)mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)2、…

GO设计模式——18、迭代器模式(行为型)

目录 迭代器模式&#xff08;Iterator Pattern&#xff09; 迭代器模式的核心角色&#xff1a; 优缺点 使用场景 代码实现 迭代器模式&#xff08;Iterator Pattern&#xff09; 迭代器模式&#xff08;Iterator Pattern&#xff09;提供了一种统一的方式来访问一个容器对…