gpt4 book ai didi

c++ - 16字节对齐问题

转载 作者:行者123 更新时间:2023-11-30 02:51:55 26 4
gpt4 key购买 nike

我正在使用 DirectXMath,在类中创建 XMMatrixXMVector

当我调用 XMMatrixMultiply 时,它会抛出未处理的异常。

我在网上发现这是字节分配的问题,因为 DirectXMath 使用 SIMD 指令集导致堆分配未对齐。

建议的解决方案之一是使用 XMFLOAT4X4 变量,然后在需要时将它们更改为临时 XMMatrix,但这不是我认为最好和最快的解决方案。

另一个是使用 _aligned_malloc,但我不知道如何使用它。我从来不需要做任何内存分配,这对我来说是黑魔法。

另一个是重载new operator,但他们没有提供任何信息如何做。

关于重载方法,我没有使用 new 来创建 XMMatrix 对象,因为我没有将它们用作指针。

在我决定将代码拆分为类之前,一切都很好。

我认为 _alligned_malloc 解决方案在这里是最好的,但我不知道如何使用它,何时何地调用它。

最佳答案

与存储安全的 XMFLOAT4X4 和 XMFLOAT4 不同,XMMATRIX 和 XMVECTOR 是硬件寄存器(SSE、NEON 等)的别名。由于库正在抽象出寄存器类型和对齐要求,因此您不应该尝试自己对齐类型,因为您可以轻松创建一个程序,该程序恰好在您的机器上运行但在另一台机器上失败。您应该使用安全类型进行存储(例如 XMFLOAT4),或者提取抽象并直接使用 vector 指令,在您的应用程序中为您尝试支持的每个 vector 扩展使用特殊的存储和对齐代码路径。

此外,在库的 vector 指令上下文之外使用这些寄存器可能会由于其他原因导致意外故障。例如,如果您将 XMMATRIX 存储在自己的结构中,某些架构可能无法创建该结构的拷贝。

关于c++ - 16字节对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com