我听说malloc()根据分配的类型对齐内存。例如,从《理解和使用C指针》一书中:



如果我遵循,这意味着int *integer=malloc(sizeof(int));将分配在地址边界上,该边界可以被4整除。即使没有在malloc上强制转换(int *)

我当时在聊天服务器上工作;我读到了带有structsimilar effect

我不得不问:从逻辑上讲,什么是地址边界本身可分割的关系为何?使用地址n*sizeof(int)上的整数将一组内存分配给129怎么办?

我知道*(integer+1)指针算法的工作原理,但是我无法确定边界的重要性...

最佳答案



如果您在谈论malloc,这是错误的。 malloc不在乎您如何处理数据,并将分配对齐的内存以适合最严格的 native 类型。

从标准:



和:



由于底层计算机的工作原理,访问未对齐的数据可能会更昂贵(例如x86)或非法(例如arm)。这使硬件可以采用捷径来提高性能/简化实现。

关于c++ - 为什么Malloc()关心边界对齐?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23575489/

10-11 22:59
查看更多