相关疑难解决方法(0)

访问非活动的union成员和未定义的行为?

我的印象是访问union除最后一个成员之外的成员是UB,但我似乎无法找到一个可靠的参考(除了声称它是UB但没有标准支持的答案).

那么,这是不确定的行为?

c++ undefined-behavior unions language-lawyer

114
推荐指数
4
解决办法
2万
查看次数

Visual Studio C编译器或Intel Intrinsics的AVX2"_mm256_set_epi64x"函数中的潜在错误

我对AVX2功能上的英特尔Intrinsics有一个非常奇怪的错误,我想在这里分享.不管是我做错了什么(我现在还不能看到什么),或者库中的错误.

我在main.c中有这个简单的代码:

__int64 test = 0xFFFF'FFFF'FFFF'FFFF;
__m256i ymm = _mm256_set_epi64x(0x0000'0000'0000'0000,
                                0x0000'0000'0000'0000, 
                                0x0000'0000'0000'0000, 
                                test);
Run Code Online (Sandbox Code Playgroud)

赋给变量ymm的值是出于某种奇怪的原因:

ymm.m256i_i64[0] = 0xffff'ffff'ffff'ffff
ymm.m256i_i64[1] = 0x0000'0000'0000'0000
ymm.m256i_i64[2] = 0x0000'ffff'0000'0000
ymm.m256i_i64[3] = 0x0000'0000'0000'0000
Run Code Online (Sandbox Code Playgroud)

此时我已经调试了好几个小时,但看不出为什么ymm.m256i_i64[2]会得到这个流氓价值.请帮忙!

有趣/奇怪的事实: 如果我写这个C代码:

__m256i ymm = _mm256_set_epi64x(0x0000'0000'0000'0000,
                                0x0000'0000'0000'0000, 
                                0x0000'0000'0000'0000, 
                                0xFFFF'FFFF'FFFF'FFFF);
Run Code Online (Sandbox Code Playgroud)

然后将值正确设置为:

ymm.m256i_i64[0] = 0xffff'ffff'ffff'ffff
ymm.m256i_i64[1] = 0x0000'0000'0000'0000
ymm.m256i_i64[2] = 0x0000'0000'0000'0000
ymm.m256i_i64[3] = 0x0000'0000'0000'0000
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是Visual Studio; 他们的编译器和调试工具,如下图所示: 在此输入图像描述

打印代码后的printf : ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 ff ff ff 00 ff ff 00 00 …

c++ intrinsics avx visual-studio compiler-bug

7
推荐指数
1
解决办法
355
查看次数

如何在c ++的x64架构中使用SSE指令?

目前我正在使用Visual C++内联汇编来使用SSE嵌入一些核心功能; 但是我认为在x64模式下不支持内联汇编.

在x64架构中构建软件时如何使用SSE?

sse simd

3
推荐指数
1
解决办法
2481
查看次数