malloc()和calloc()函数返回一个指向已分配内存的指针,该内存适合任何内置类型。
现在,GCC通过语法[1]
为矢量类型提供内置支持template<class T>
using vec4_t __attribute__ ((vector_size (4*sizeof(T))))=T;
可以对两个vec4_t<float>
或直接使用AVX vec4_t<double>
进行算术运算,但malloc
=时,T
不能在32位平台上使用float
= T
时的double
或64位平台。
现在there is P0035R1,这解决了过度对齐类型的动态分配问题。但为什么责备malloc
而不是向operator new
添加更多变体并不是更好?[2]事实上,编译器内置了对这些类型的支持,因此可以预期malloc
工作正常。
[1]在C中,我必须为每个typedef指定类型
[2]页面对齐的内存是另一个问题