c语言sscanf函数的用法是什么
287
2022-11-07
大牛内存分配经验
大致是这样,实际要复杂一些.有很多判断,申请大小为2000KB以上,走操作系统mmap调用,小于3408字节走一个跳表查询,会在16种大小的切片中选择合适的切片,可选的有N个方案,优先少bit数,同时限制最大浪费不能超过20%,平均浪费小于10%, 还有就是3408字节–4KB的一种情况,(4KB+1)-16KB的会在1KB/4KB的切片中选择最合适的切片例如4097字节选择5个1KB的连续块,这样的浪费比较少,16KB–2000KB的全部是4KB的N倍数,2000KB就是连续500个4K块.使用了预处理软件定义好最优方案,自动生成跳表数据结构代码,实际代码这块就是几个简单的判断+跳表,处理开销大约只有几个ns,个人估计大小判断这块只有2ns的开销.最近有空闲时间,又做了一些优化,比年初的版本性能又有了大幅度提升,目前so动态链接方式的库代码,malloc 4KB 总开销已经压缩到了8.8ns左右(intel 9400F 2.9G), 其中主要开销是so动态链接接口的开销,thread local ptr.get()的查询开销,按照数据块大小选择不同大小切片的开销,最后才是bitmap核心代码的开销.bitmap核心代码的开销估计只占一半.新一代bitmap的算法比传统算法快很多,自研内存库外部表现比Google tcmalloc的4KB申请大约外部性能提升80倍,实际内存分配的bitmap核心代码有2个数量级以上的性能提升.关于新一代bitmap算法,有一个比较慢的开源实现,可以参考Go语言的内存分配,但也比传统算法快太多了,Stefno:图解Go语言内存分配性能有大幅提升的主要原因是bitmap查找的时候使用了AVX之类的SIMD指令?是的,有几条汇编代码,极大的提升了性能,大约只到SSE4.2指令,一些优化有黑科技,例如:CPU硬件设计中的软件优化算法,早期除法比Intel CPU硬件指令除法有5倍性能提升的软件仿真算法,64bit移位目前比Intel CPU有3倍性能提升的软件仿真算法…总体,还是非常复杂的,工程上的优化很复杂,不是单独几个点,代码总行数也远超其他内存分配库的规模, 也基本重写了用到的std库.迁移到ARM的话,基本没有困难,就是重新编译一次的事情,性能会慢很多,每个函数都还是有一套标准C/C++语言的算法垫底的.
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~