std::span是在 C++20 中引入的,但我仅限于 C++14,并且在较小程度上仅限于任何版本的 Boost 库。Boost中有类似的东西吗?
假设我有一些16字节对齐的结构,只包装3xFloat32数组:
#[repr(C, align(16))]
pub struct Vector(pub [f32; 3]);
Run Code Online (Sandbox Code Playgroud)
现在,我想将其划分为两个实例,如下所示:
use core::arch::x86_64;
let a = Vector([1f32, 2f32, 3f32]);
let b = Vector([4f32, 5f32, 6f32]);
let mut q = Vector([0f32, 0f32, 0ff32]);
unsafe {
let a1 = x86_64::_mm_load_ps(a.0.as_ptr());
let b1 = x86_64::_mm_load_ps(b.0.as_ptr());
let q1 = x86_64::_mm_div_ps(a1, b1);
x86_64::_mm_store_ps(q.0.as_mut_ptr(), q1);
}
Run Code Online (Sandbox Code Playgroud)
它可以进行除法,但是有一个问题:第4个元素包含垃圾,除其他外,垃圾可以发出NaN信号。并且,如果未屏蔽某些例外标志,则将触发SIGFPE。我想以某种方式避免这种情况,而不会完全沉默信号。即我要么只想在第4对元素上使其静音,要么在其中添加一些合理的值。最好,最快的方法是什么?也许总体上有更好的方法?
我正在用blake2板条箱做一些散列。它只接受字节片&[u8]。大部分数据(字符串)可以毫无问题地转换为字节片,但时间戳(i64)不能。是否有跨平台、惯用的方式来进行这种转换?i64 的字节顺序是通过to_le在对其进行任何操作之前调用来确保的。