我正在试图找出这段代码的作用。我正在分析我教授的malloc代码,他在代码中有这个功能。我不明白他为什么这样做。对我而言,它只返回相同数量的分配空间。
static inline size_t word_align(size_t size) {
return size + (sizeof(size_t) - 1) & ~(sizeof(size_t) - 1);
}
答案 0 :(得分:4)
你本可以亲眼看到这个:一个简单的例子显示了对齐一词。
#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 %zu\n", i, word_align(i));
return 0;
}
节目输出:
1 4
2 4
3 4
4 4
5 8
6 8
7 8
8 8
9 12
答案 1 :(得分:1)
代码正在为所请求的内存执行 8字节对齐。这是系统编程中的常见做法,也是一种经典技术。
为什么要这样做?来自维基百科:
数据对齐意味着将数据放在一个等于的内存地址 字大小的一些倍数,这增加了系统的 由于CPU处理内存的方式而产生的性能。
要理解代码更好的括号,使运算符优先于'+'和'&amp;'明确。
(size + (sizeof(size_t) - 1)) & ~(sizeof(size_t) - 1)
鉴于sizeof(size_t) = 8
和size = 170
,代码的作用是:
(170 + 8) & ~(0x7)
因此,~(sizeof(size_t) - 1)
充当3位掩码。