fei*_*ihu 2 c c++ git macros caching
我见过很多cache.h文件中使用的下面的宏:
#define alloc_nr(x) (((x)+16)*3/2)
Run Code Online (Sandbox Code Playgroud)
这是一个例子.
我知道它用于在缓冲区几乎满时增加分配的缓冲区大小.缓冲区将增长约为其当前大小的1.5倍.这*3/2就是使用的原因.但为什么增加一个额外16的?宏x*1.5+24在它扩展的时候就变成了.这个宏有什么特别的原因吗?为什么每个人都喜欢用这个?
如果初始值为0,则需要alloc_nr(0)提供严格正数(此处为24).没有16它就会是0.你想要alloc_nr(x)大于x(并且不要太接近x以避免过于频繁的重新分配).
具体的数字16和3和2 是不是很重要(比例3/2更显著).
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |