是以下未定義行爲?使用_mm_loadu_si128會發生什麼,如果該參數指向一個字符串小於16個字節(
char s[] = "hello";
__m128i v = _mm_loadu_si128(reinterpret_cast < __mm_128i * >(s));
下面肯定是不確定的行爲,至少使用-fsanitize=address
編譯時,抱怨閱讀過去緩衝區的結束。但SSE相當於正悄然接受。我認爲這是因爲在翻譯單元上證所內部函數不與-fsanitize=address
char s[] = "hello";
typedef __uint128_t T;
T mask = ~(T(0)) >> (8 * (sizeof(T) - strlen(s)));
T v = mask & *((T *)(s));
C和C++中不同的語言。不要將C標籤用於C++問題! – Olaf
因爲嘗試讀取內存頁末尾附近的內容並且未映射下一個內存頁而導致出現分頁錯誤,所以程序崩潰的可能性不大。它會發生。這是錯誤的代碼,簡單明瞭。 –