在C++20中,我们获得了“assume aligned”功能,在音频代码中传递指向对齐的浮点数块的指针时非常有用。假设我们有以下跨度类型:
如何表明该结构体中的数据指针按某个constexpr整数对齐?C++ 20中是否已经有这样的功能?
template<typename T>
struct Signal
{
const T* data
size_t size;
};
如何表明该结构体中的数据指针按某个constexpr整数对齐?C++ 20中是否已经有这样的功能?
constexpr int SIMDAlignment = 16;
template<typename T>
struct Signal
{
aligned<SIMDAlignment> const T* data
size_t size;
};
void *__builtin_assume_aligned(void*, size_t)
的std
版本,这并不令人惊讶。https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html(在C中使用类似于`foo = __builtin_assume_aligned(foo, 64);`,其中允许隐式转换为/从void*。) - Peter Cordes__builtin_assume_aligned
进行实现:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1007r3.pdf。 - Daniel Langrtypedef int aligned_int __attribute__((aligned(16)))
这样的事情,并且有指向该类型的指针,但那是分开的。(而且不太容易工作,因为sizeof(aligned_int)也是16,带填充)。typedef技巧更适用于声明*未对齐和may_alias
版本的类型。 - Peter Cordes