mojo_hub 关于描述指针 API 的 Twitter 线程的快速问题。 在附图中,我们创建一个指向MyType32 个字节的自定义类型的指针。然后我们为它分配内存,自定义对齐方式为 64 字节。 我原以为分配的总字节数为 64 ,但帖子说是9 5 。为什么?
mojo_hub 看起来这里添加了解释- https://github.com/modularml/devrel-extras/commit/a0c4b73d7b788827bd75a46d5e455f7e64040f73。 //这是最坏的情况,您可能需要最多 63 个额外字节才能 在分配的块中找到// 64字节对齐的地址。 //这并不意味着每次分配消耗 95 个字节;这是为了确保一致性。 但我仍然不确定最坏的情况可能需要 63 个额外字节。我假设地址总是从 64 字节对齐的内存地址开始。也许这个假设是错误的?
mojo_hub 推文的解释是一种保守的方法,并提供了一个上限,分配器可以将对象放置在 64 字节大的已分配内存块中的任何位置。这保证了对象可以开始的块内的 64 字节对齐地址。然而,在大多数普通分配器中,正如您所说,64字节就足够了。也许选择对齐方式为 31 会是一个更好的选择,它不是2 的倍数,并且对齐的大小将为 62,这不会造成混乱。