我想我理解了4字节的堆栈对齐,例如,如果我只添加一个字符,他的地址将位于4字节的右侧(如果还有其他1或2字节变量,则稍早一点)
我仍然无法理解堆中的对齐方式,我以为有 4 字节或 8 字节对齐,但事情是这样的,当我分配 100 个字节然后分配 20 个字节时,第一个字节的末尾之间有 4 个字节和第二个的开始,所以我猜测堆将使用 8 字节对齐。
通过连续分配 1 4 7 8 9 14 16 17 字节,我注意到 1、4、7、8、9 各占用 16 字节,14 16 17 各占用 24 字节,为什么会这样?
我正在使用 C/C++ 并使用 malloc 进行分配(与 new 相同)。
谢谢。
最佳答案
在 Windows 上,malloc
函数被记录为返回在 32 位应用程序的 8 字节边界上对齐的内存,以及在 64 位应用程序的 16 字节边界上返回的内存。在 Linux 上,它只说它返回“适合任何类型变量的内存”,但它可能也是 8 和 16。
最重要的是,malloc
需要保留额外的内存来存储管理堆所需的跟踪数据。这意味着当您请求 N 个字节时,malloc
实际上将使用 N+X 个字节,其中 X 是常量并取决于实现。
关于汇编 - 堆对齐 - x86 intel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229211/