我正试图弄清楚这段代码的作用。我正在分析我的教授的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) = 8
和size = 170
,代码的作用是:
(170 + 8) & ~(0x7)
因此,~(sizeof(size_t) - 1)
充当3比特掩码。