c++ - 具有对齐成员的对象的动态分配 - 可能的解决方案?

标签 c++ visual-c++ memory-management sse memory-alignment

我正在考虑使用 SSE 来加速我项目中的一些代码。这通常需要对我正在处理的数据进行 16 字节对齐。对于静态分配,我想 __declspec(align(16)) 可以解决问题,但我的问题是:在进行动态分配时确保情况如此的最佳方法是什么?特别是在分配的对象不直接要求对齐但使用具有对齐要求的对象作为成员的情况下(因此更容易忘记确保它正确对齐)。我想出了以下解决方案:

  1. 始终假设任何潜在的非静态分配数据都是未对齐的,并使用未对齐的加载指令。从我读到的内容来看,这很慢,在这种情况下可能根本不值得为 SSE 操心。我可以实现它并测试它的性能,但我宁愿在投入大量工作之前询问更好的解决方案,只是为了发现它不值得或有其他解决方案。

  2. 要非常小心,仅使用 _aligned_malloc/_aligned_free 来分配任何需要对齐的对象以及使用这些对象作为成员的任何对象。这可能很容易忘记,因此容易出错。

  3. 全局重载 new/delete 和/或创建对齐的自定义 malloc/free 函数内存,然后将它们用于一切。然而,逐字对齐动态分配的所有可能不是最好的主意。

  4. 使用重载的new/delete 运算符创建一个基类,然后确保任何需要对齐的类和使用这些作为成员的任何类都继承它。然后只需对大多数/所有动态分配使用new/delete。可能比 2 更不容易出错。

  5. 我没有想到或不知道的其他方式?

选项 1.-3。可能不是最好的主意。 4. 呢?我提到的任何事情都错了吗?有关此主题的建议、意见和有用的链接?

提前谢谢你:)

最佳答案

在 Windows 上,malloc 是 16 字节对齐的 (msdn)。如果您的平台 malloc 具有较低的对齐要求,则需要为 SSE 使用的对象使用对齐版本的 malloc。

编辑:如果您有特定类的对象需要 SSE 支持,您可以仅为该类重新定义新建/删除。

关于c++ - 具有对齐成员的对象的动态分配 - 可能的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203773/

相关文章:

c++ - 排除时间测试

c++ - MFC 自定义 Tab 键事件处理程序

java - 从 MATLAB 执行时如何为 JAVA 程序分配更多内存?

C++多维结构数组

c - 关于内存对齐的一些困惑

C++类参数这是什么?

c++ - 对象数组 C++

c++ - 您可以从调试编译的二进制文件中检索源代码吗?

c++ - 从函数中获取参数类型列表

C++:在WINDOWS上写入BMP图像格式错误