【发布时间】:2023-12-18 14:34:01
【问题描述】:
我正在使用 Apple GCC 4.2.1,我偶然发现了以下代码的一个奇怪问题...我在尝试初始化 __m128 类成员变量。不幸的是,下面的简化代码在测试应用程序中工作,但也许你仍然可以帮助我找到这个问题的根源?
我不明白 EXC_BAD_ACCESS 异常背后的原因 - __m128 类型不是指针,所有其他 MyClass 成员都在没有的情况下初始化和访问任何问题,没有堆栈/堆损坏的迹象,如果我使用局部变量,一切正常,并且在 MSVC 下没有问题......也许对齐有问题?
请帮忙!
class MyClass
{
public:
// lots of members
__m128 vect;
MyClass()
{
vect = _mm_setr_ps (0.f, 0.f, 0.f, 10.0f); // Program received signal: “EXC_BAD_ACCESS”.
}
void iniialize()
{
__m128 localVector = _mm_setr_ps (0.f, 0.f, 0.f, 10.0f); // No problems
vect = localVector; // Program received signal: “EXC_BAD_ACCESS”.
}
};
【问题讨论】:
-
谢谢你,Sehe 和 Paul!但是,指定 16 字节对齐并没有解决任何问题 :( 请告诉我,还有什么可能导致这个问题?
-
您是在堆栈上还是通过
new创建类的实例?如果您使用的是new,那么您是否覆盖它以使用例如posix_memalign?在每个 vect 分配处设置一个断点并检查对齐方式(vect 成员应该有一个以 0 结尾的十六进制地址)。
标签: c++ visual-c++ gcc exc-bad-access sse