当前位置:  开发笔记 > 后端 > 正文

什么时候会在zmalloc上使用malloc?

如何解决《什么时候会在zmalloc上使用malloc?》经验,为你挑选了1个好方法。

关于我最近遇到的函数,在线或在stackoverflow上有很少的信息zmalloc.(事实上​​,这只是zmalloc关于SO 的第3个标签问题).

我收集了以下信息:

zmalloc自动跟踪并释放不同内存,类似于C++智能指针.

zmalloc显然启用了一些指标,至少在redis源的情况下.

所以我的问题是:

    在使用zmalloc而不是malloc时,会失去什么灵活性?即malloc继续提供什么好处,而zmalloc没有?

    zmalloc在C11中不标准吗?这是一个定制功能吗?

Peter - Rein.. 10

看起来zmalloc是redis-tools(https://github.com/antirez/redis-tools)的一部分.redis是一种将内容保存在内存中的数据库(http://redis.io/).

通常会开发malloc替换,因为某些目标系统不提供合适的malloc,或者因为调用者需要额外的功能.我认为zmalloc是系统malloc/free的一个非常简单的包装器,只是跟踪分配的总内存.没有自动免费参与.您指向的帖子还解释了需求:数据库可以配置为不使用超过一定量的内存,因此需要跟踪总体消耗.



1> Peter - Rein..:

看起来zmalloc是redis-tools(https://github.com/antirez/redis-tools)的一部分.redis是一种将内容保存在内存中的数据库(http://redis.io/).

通常会开发malloc替换,因为某些目标系统不提供合适的malloc,或者因为调用者需要额外的功能.我认为zmalloc是系统malloc/free的一个非常简单的包装器,只是跟踪分配的总内存.没有自动免费参与.您指向的帖子还解释了需求:数据库可以配置为不使用超过一定量的内存,因此需要跟踪总体消耗.


@PeterSchneider a)使用`if`在主执行路径中执行向上舍入为2的幂,而不是仅仅执行`round =(unrounded + n-1)&〜(n-1);`.只要错误预测,"if"就会刷新整个管道,算法只是两个简单的指令.b)完全使用四舍五入.没有必要,只是浪费时间.c)分两步执行`zrealloc()`中的大小校正而不是一步.d)`stderr`上完全没有意义的`flush()`,它已经被标准保证为无缓冲.当然,无论如何都不会执行同花顺,但仍然......
@cmaster您是否曾向安提兹提及此事?
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有