【问题标题】:Difference between aligned malloc and standard malloc?对齐malloc和标准malloc的区别?
【发布时间】:2016-09-24 13:47:44
【问题描述】:

我是 malloc 和对齐 malloc 的新手。我知道如何使用它们。但是,我不知道在哪种情况下我们应该使用对齐的 malloc 而不是标准的 malloc。能给我解释一下吗?

【问题讨论】:

  • 语言?我假设是 C,但您还应该提供其他环境细节(操作系统、语言实现等)。标准 C 只有malloc,保证对所有标准数据类型都正确对齐。
  • 我在 Ubuntu 的 C11 标准中使用
  • 将这些添加为标签,请确认和/或根据需要进行更改。
  • 我已经把它们当成标签了,对不起

标签: ubuntu gcc malloc ubuntu-16.04 c11


【解决方案1】:

glibc documentation 清楚地说明了您应该在哪里使用aligned_alloc

在 GNU 系统中,mallocrealloc 返回的块地址始终是 8 的倍数(或 64 位系统中的 16)。如果您需要一个地址是 2 的高次幂的倍数的块,请使用 aligned_allocposix_memalign

C 标准已经保证 malloc 将为任何标准类型返回适当对齐的内存块,但在某些情况下您可能需要或需要更严格的对齐。

作为一个例子,我似乎记得 SSE2 (SIMD) 指令需要它们的数据在 16 字节边界上对齐,因此即使在 malloc 仅保证对齐到 8 的系统上,您也可以使用 aligned_alloc 来为您提供-字节边界。

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多