c语言 - 这不就是返回原始大小吗?



我正试图弄清楚这段代码的作用。我正在分析我的教授的malloc代码,他的代码中有这个函数。我不明白他为什么这么做。对我来说,它只是返回相同数量的已分配空间。

static inline size_t word_align(size_t size) {
    return size + (sizeof(size_t) - 1) & ~(sizeof(size_t) - 1);
}

您可以亲眼看到这一点:一个简单的例子显示了单词对齐。

#include <stdio.h>
size_t word_align(size_t size)
{
    return size + (sizeof(size_t) - 1) & ~(sizeof(size_t) - 1);
}
int main(void)
{
    size_t i;
    for (i=1; i<10; i++)
       printf("%zu %zun", i, word_align(i));
    return 0;
}

程序输出:

1 4
2 4
3 4
4 4
5 8
6 8
7 8
8 8
9 12

代码正在为请求的内存执行8字节对齐。这是系统编程中的一种常见做法,也是一种经典技术。

为什么要这样做?来自维基百科:

数据对齐意味着将数据放在等于单词大小的倍数,这增加了系统的CPU处理内存的方式带来的性能。

要更好地理解代码,请使用括号使运算符优先于"+"one_answers"&"明确的

(size + (sizeof(size_t) - 1)) & ~(sizeof(size_t) - 1)

给定sizeof(size_t) = 8size = 170,代码的作用是:

(170 + 8) & ~(0x7)

因此,~(sizeof(size_t) - 1)充当3比特掩码。

相关内容

  • 没有找到相关文章

最新更新