6

在 libc 的 malloc(x) 中,据说该函数返回一个指向至少 x 字节的内存区域的指针,并且该指针与 8 字节对齐。这种对齐是什么意思?谢谢你。

4

3 回答 3

9

这意味着指向的地址 mod 8 为 0:

pointer % 8 == 0

这对于可能影响正确性或效率的低级别操作可能很重要。另请参阅此答案

于 2013-03-14T23:47:27.867 回答
6

这意味着内存从一个 8 的倍数的地址开始。

至于您为什么会关心:对于未对齐的内存,CPU 有时需要两次访问才能全部读取。在某些情况下,它甚至不会尝试,只会抛出错误。提到“对齐到 8 个字节”是为了让调用者知道它是否必须对指针进行任何伪造。

(通常,您不会在意——编译器会为您处理大部分对齐问题。但信息就在那里,以防您出于某种原因需要它。)

于 2013-03-14T23:50:59.300 回答
1

内存对齐描述了地址的模数。所以 8 字节对齐意味着他的地址是 8 的倍数。

这对许多旧系统来说至关重要,因为地址需要在“字”边界上对齐,通常是四个字节或两个字节的倍数。如果它没有正确对齐,程序会因“对齐错误”而崩溃。

最近的机器通过从任何地址加载来解决这个问题,但这通常意味着加载数据需要更多的周期。

于 2013-03-14T23:55:12.483 回答