gpt4 book ai didi

c - 内存分配器宏解释

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:51 25 4
gpt4 key购买 nike

我试图理解实现 malloc 的内存分配器代码,我偶然发现了这个宏

// get the size of the block from header
#define GET_SIZE(p) (GET(p) & ~0x7)

注释说清楚了它的作用,但我不明白它的作用或它是如何工作的。有人可以详细解释一下吗?

最佳答案

在二进制中,0x7.... 0000 0111~0x7.... 1111 1000,所以GET(p) & ~0x7的值是GET(p)“屏蔽掉”它最右边的三位,也就是设置它们归零。

例如,如果 GET(p) 产生 10,即 .... 0000 1010GET_SIZE(p) 将是8,它具有 .... 0000 1000 的二进制表示。

这与 GET(p) - GET(p) % 8 类似,但是在这种情况下,GET(p) 被计算一次。如果 GET_SIZE(p) 被定义为 GET(p) - GET(p) % 8,像 GET_SIZE(i++) 这样的东西会导致 undefined行为。此外,它可能会对性能产生一些影响,但现代编译器被认为足够聪明,可以进行这样的优化。

关于c - 内存分配器宏解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35976903/

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