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



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

表示指向地址mod 8为0:

pointer % 8 == 0

这对于可能影响正确性或效率的低级操作来说非常重要。

表示内存从一个8的倍数的地址开始

对于没有对齐的内存,CPU有时需要两次访问才能读取所有的内存。在某些情况下,它甚至不会尝试,只会抛出一个错误。提到"对齐到8字节"是为了让调用者知道它是否必须对指针做任何捏造。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新