当malloc返回时,8字节对齐是什么意思?

7
在libc的malloc(x)函数中,该函数返回一个至少为x字节的内存区域的指针,并且该指针按8字节对齐。这个对齐是什么意思?谢谢。
3个回答

10

这意味着指定的地址模8等于0:

pointer % 8 == 0

这对低级操作可能很重要,因为它可能会影响正确性或效率。另请参见此答案


2
为了确保CPU可以高效地读取内存地址,人们会关注字节对齐。非对齐的内存块会导致总线错误。请参见此处的Unaligned Access部分-> http://en.wikipedia.org/wiki/Segmentation_fault#Bus_error - user1898811

6

这意味着,内存起始位置的地址是8的倍数。

为什么你会关心这个问题呢?因为对于未对齐的内存,CPU有时需要两次访问才能全部读取。在某些情况下,它甚至不会尝试,直接报错。提到“对齐到8个字节”是为了让调用程序知道它是否需要对指针进行任何调整。

通常情况下,你不需要关心这个问题,编译器会自动处理大部分对齐问题。但是如果出现某些特殊情况,这些信息仍然很有用。


1
内存对齐描述地址的模数。因此,8字节对齐意味着地址是8的倍数。
在许多旧系统上,这很关键,其中地址需要对齐到“字”边界,通常是四个字节或两个字节的倍数。如果没有正确对齐,程序会崩溃并出现“对齐错误”。
更近期的机器通过从任何地址加载来解决这个问题,但通常这意味着需要更多的周期来加载数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接