为什么在许多cache.h文件中使用'#define alloc_nr(x)(((x)+16)*3/2)'宏?

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在它扩展的时候就变成了.这个宏有什么特别的原因吗?为什么每个人都喜欢用这个?

Bas*_*tch 6

如果初始值为0,则需要alloc_nr(0)提供严格正数(此处为24).没有16它就会是0.你想要alloc_nr(x)大于x(并且不要太接近x以避免过于频繁的重新分配).

具体的数字1632 是不是很重要(比例3/2更显著).

  • 你知道`alloc_nr`中的'nr`是什么意思吗?数? (2认同)