gpt4 book ai didi

c - 这个 C 语言大小调整代码有什么优点?

转载 作者:行者123 更新时间:2023-12-02 02:11:18 25 4
gpt4 key购买 nike

对通用问题标题表示歉意,我不确定如何正确表达它(欢迎提出建议!)

我正在尝试理解 Common Mark parser 的一些代码并发现了这个:

  /* Oversize the buffer by 50% to guarantee amortized linear time
* complexity on append operations. */
bufsize_t new_size = target_size + target_size / 2;
new_size += 1;
new_size = (new_size + 7) & ~7;

因此,给定一个数字,例如 32,它将添加 (32/2) [48]、添加 1 [49]、添加 7 [56],最后与 -8 [56] 进行 AND 运算。

这是一种常见的模式吗?具体来说就是添加一个数字,然后与其补码进行“与”运算。

有谁能够深入了解它正在做什么以及存在什么优势(如果有的话)?

最佳答案

(+7) & ~7 部分将数字向上舍入到 8 的第一个倍数。它仅适用于 2 的幂(72^3-1)。如果您想舍入为 32 的倍数,请使用 31 而不是 7

将大小舍入为 8 的倍数的原因可能特定于算法。

代码的作者也可能知道内存分配器的工作原理。如果分配器在内部使用 8 字节数的内存块,则 18 之间任意字节数的分配请求将使用整个内存块。堵塞。通过请求大小为 8 倍数的 block ,可以以相同的价格获得几个额外的字节。

关于c - 这个 C 语言大小调整代码有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67701413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com