在网上或stackoverflow上关于我最近遇到的一个名为zmalloc
的函数,几乎没有什么信息。(事实上,这是SO上唯一的第三个标记为zmalloc
的问题)。
我得到了以下信息:
- zmalloc自动跟踪和释放未释放的内存,类似于C++智能指针。
- 据说zmalloc至少在redis源代码中启用了一些度量标准。
所以我的问题是:
- 使用zmalloc而不是malloc会失去哪些灵活性?也就是说,malloc继续提供了哪些zmalloc没有的好处?
- zmalloc在C11中是否非标准?这是一个自定义的函数吗?
zmalloc()
不是我迄今为止见过的最好的编写代码,它比必要的添加了更多的开销。当然,这种开销被malloc()
本身的开销所淹没,但是,像那样的代码应该由知道如何优化的人编写... - cmaster - reinstate monicaif
进行向上舍入到二的幂,而不仅仅是直接执行rounded = (unrounded + n-1) & ~(n-1);
。如果预测错误,if
会刷新整个流水线,而算术运算只需要两个简单的指令。 b) 使用舍入本身就是不必要的,只会浪费时间。 c) 在zrealloc()
中分两步执行大小校正。 d) 对于已经保证无缓冲的stderr
执行完全没有意义的flush()
。当然,该刷新从未被执行过,但仍然存在。 - cmaster - reinstate monica