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

cod*_*ody 5 c malloc memory-management

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

per*_*eal 8

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

pointer % 8 == 0
Run Code Online (Sandbox Code Playgroud)

这对于可能影响正确性或效率的低级操作非常重要.另见这个答案.

  • 人们会关心字节对齐,以确保CPU可以有效地读取内存地址.未对齐的内存块会导致总线错误.请参阅此处的未对齐访问部分 - > http://en.wikipedia.org/wiki/Segmentation_fault#Bus_error (2认同)

cHa*_*Hao 6

这意味着内存从8的倍数开始.

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

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