x4r*_*rkz 2 malloc assembly heap-memory alignment memory-alignment
我想我理解堆栈对齐是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 是常量并取决于实现。