当malloc返回时,8字节对齐意味着什么?

时间:2013-03-14 23:46:04

标签: c memory-management malloc

在libc的malloc(x)中,该函数被称为返回指向至少x个字节的内存区域的指针,并且指针对齐到8个字节。这种对齐意味着什么?谢谢你。

3 个答案:

答案 0 :(得分:8)

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

pointer % 8 == 0

这对于可能影响正确性或效率的低级别操作非常重要。另请参阅this answer

答案 1 :(得分:6)

这意味着内存以8的倍数地址开始。

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

(通常,你不会在意 - 编译器会为你处理大部分对齐问题。但是如果出于某种原因需要它,那么信息会在那里。)

答案 2 :(得分:1)

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

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

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