我一直在阅读遗留代码,其中涉及定制的内存池系统,然后我发现代码使用了_aligned_malloc。我想知道这个功能是什么,我什么时候必须使用它。
感谢大家。
我确实读过 MSDN,但我想要的答案是“想要某种对齐的原因的一个例子是在 x86 上使用带有 SSE 指令集的数据,其中数据必须对齐到 16 倍数”。
我终于明白这些代码的含义了。再次感谢。
我一直在阅读遗留代码,其中涉及定制的内存池系统,然后我发现代码使用了_aligned_malloc。我想知道这个功能是什么,我什么时候必须使用它。
感谢大家。
我确实读过 MSDN,但我想要的答案是“想要某种对齐的原因的一个例子是在 x86 上使用带有 SSE 指令集的数据,其中数据必须对齐到 16 倍数”。
我终于明白这些代码的含义了。再次感谢。
当内存分配的对齐对您很重要时,此功能很有用。
对齐是指返回的指针的数值必须能被某个数整除,即。((unsigned int)ptr) % alignment
应评估为 0。
需要某种对齐的一个示例是在 x86 上将数据与 SSE 指令集一起使用,其中数据必须与 16 的倍数对齐。
这是您可能涉及的一个用例。在我 17 年的 C/C++ 开发中,我只需要一次_aligned_malloc()
(WinOS 实现)和memalign
(POSIX 实现)内核函数,那是在编写低级磁盘 I/O 时。这样做的原因是,当不使用 OS I/O 缓冲区(例如在 WinOSopenfile()
中使用FILE_FLAG_NO_BUFFERING
标志调用)和读/写磁盘时,操作系统需要内存块与磁盘扇区大小对齐;如果磁盘扇区大小为 512 字节,并且您想将 1234 字节写入磁盘,我会执行以下操作:
_aligned_malloc(1234, 512);
你检查过 MSDN 文档吗?您可以在此处找到相应的条目 。