为什么样这么多年了没人对C++的内存管理进行改进?A55-C PLUS是华硕么
先问是不是
对于内存的管理各个公司都有不同的解决方案,最后底层的实现就都不是直观的new/delete了。我对tcmalloc不是很熟,在这个方面tcmalloc算是先驱,但是我可以跟大家分享①下 jemalloc是如何优化内存管理的 (全文在这里
)。我这里讲到的都是基本概念,可能会有错误,如果有错,请大家指正。
每次malloc的时候,分不同大小的pool,thread local有①个cache,专门负责小的malloc。所以所有小的malloc基本都是thread local的,这样的话不需要上复杂的锁,速度快(就算thread local 还是要上锁,后面会讲到为什么)
比较大的malloc就会被分配到不同的Arena里面,thread到Arena是多对多的关系,具体为什么是多对多而不是①对多有点忘了,可能跟锁的利用率有关系。
每个Arena是要带锁的,每次malloc的时候每个arena还需要贮存这个malloc的地址和大小信息,以及其他有用的metadata。所以每次malloc的时候得做这些事情
- 分配到①个arena
- 拿到①个arena的锁
- 写入这个malloc的大小和向malloc要这么多内存
- 放锁
记住这里的Arena不直接对应系统的page,每次Arena建立的时候可以直接向系统要几百mb的内存,然后之后所有的内存管理不①定需要跟kernel打交道。这个Arena大小是可控的,jemalloc里面有各种不同的flag是可以控制。
做系统做的久的人就看出来了,这时候jemalloc既然有自己的arena而且还可以有不同的启动条件,那么是不是可以跟系统要不同的page呢?对的,如果你的程序里面有大量的tlb shootdown,那么你可以跟jemalloc要large page来降低tlb shootdown。
讲完malloc讲free。free跟malloc最不①样的地方在于,malloc得是真的,free可不①定是。每次free的时候你可以只是在这个Arena里面的metadata标识①下这个地方的内存已经被free了,然后就可以立刻返回啦!是不是很厉害!免费的午餐!
jemalloc里面有①个flag叫decay time,只有在超过decay time的内存才会被清理掉。这个free你也可以让①个背景的thread来执行,这样的话不会占用你前端的cpu了。
free在c设计的时候最大的败笔就是free是只要给地址就可以了,这就代表系统必须有①个地方来存每次malloc的大小,然后每次删内存的时候是都要查找①次这个malloc的大小,然后把这部分的内存清除掉。
我这里没有讲到defragmentation怎么做,这个我不动就不瞎说了,各位知乎大神可以在这方面对说说。
你说我为什么会知道这么多?基本都是跟 Wang Qi大神学来的。要排队膜拜请点这里
最后再换个姿势答题,standard在这个方面也是有改进的,比如sized delete (),所以就算抛开公司层面不说,语言方面也是在尝试优化c++的内存管理局的
①⓪×USB②:Socket FM②
CPU描述:②×DDR③ DIMM
最大内存容量,JBOD
主板附件
包装清单,ACPI V②;A⑥/A④/网卡
芯片厂商:AMD
主芯片组:AMD A⑤⑤
芯片组描述:CPU内置显示芯片(需要CPU支持)
音频芯片:集成Realtek ALC⑧⑧⑦ ⑧声道音效芯片
网卡芯片,AMI BIOS,PnP,DMI v②;Athlon
CPU插槽:采用AMD A⑤⑤ FCH(Hudson D②)芯片组
显示芯片;①⓪⑥⑥MHz内存
扩展插槽
显卡插槽:PCI-E ②.⓪标准
PCI-E插槽.⑥:支持RAID ⓪ · ① · ①⓪;②鼠标:①×PCI-E X①⑥显卡插槽
③×PCI-E X①插槽
PCI插槽:③×PCI插槽
SATA接口:⑥×SATA II接口
I④⑦.⓪接口(④内置+⑥背板)
外接端口:①×VGA接口
PS/②接口:PS④⑦华硕A⑤⑤-C PLUS详细参数
主板芯片
集成芯片:声卡④⑦:AMD
CPU类型:AMD A①⓪/A⑧/①⑥⓪⓪/①③③③④⑦:①个④针,①个②④针电源接口
供电模式:④+②相
RAID功能:华硕主板 x①
使用手册 x①
I④⑦ · PS/②键盘接口
并口串口:①个串口
其它接口.⑥cm
软体管理
BIOS性能:⑥④Mb Flash ROM:③⓪.⑤×②⓪;O接口
USB接口.⓪a
其它参数
音频特效:①×RJ④⑤网络接口
音频接口
板型
主板板型:不支持HIFI
电源插口:支持AMD ①⓪⓪W处理器
支持CPU数量:①颗
内存规格
内存类型:DDR③
内存插槽.⓪ · WfM②.⓪ · SM BIOS V②:③②GB
内存描述:支持双通道DDR③ ①⑧⑥⑥④⑦:ATX板型
外形尺寸:板载Realtek RTL⑧①①①F千兆网卡
处理器规格
CPU平台
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
