这不是刚刚恢复原来的尺寸吗?

时间:2016-01-11 20:25:39

标签: c operating-system malloc

我正在试图找出这段代码的作用。我正在分析我教授的malloc代码,他在代码中有这个功能。我不明白他为什么这样做。对我而言,它只返回相同数量的分配空间。

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

2 个答案:

答案 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) = 8size = 170,代码的作用是:

(170 + 8) & ~(0x7)

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