如何创建对齐的数组 c++ 数组?
How to create aligned array of array c++?
我想创建一个由其他数组组成的对齐数组。我知道如何使用std::vector<>
来做到这一点,但是带有矢量的方法不适合我。
提前非常感谢那些能够帮助我的人。
下面是我想做的一个例子:
for (int i = 0; i < 16; ++i)
std::cout << arr[i] << " ";
// Prints 0 1 2 3 4 5 6 7 8 9 10...15
int m = 5;
for (int i = 0; i < m ; ++i) {
float* varr[i] = (float*) aligned_alloc(32, sizeof(float)*8);
int k = i*8;
varr[i] = {arr[k+0], arr[k+1], arr[k+2], arr[k+3], arr[k+4], arr[k+5], arr[k+6], arr[k+7]};
}
varr[0] = {arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]};
// Prints: 0 1 2 3 4 5 6 7
varr[1] = {arr[8], arr[9], arr[10], arr[11], arr[13], arr[14], arr[15], arr[16]};
// Prints: 8 9 10 11 12 13 14 15
varr[2] = .....;
varr[3] = .....;
varr[4] = .....;
我不确定 avx 指令,但我修改后的方法将是这样的:
int main (){
int dim1{5}, dim2{8};
float* varr = static_cast<float*> (aligned_alloc(sizeof(float)*dim1*dim2, sizeof(float)*dim1*dim2));
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
varr[i*dim2+j] =i*dim2 + j;
}
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
std::cout << &varr[i*dim2+j] << ",";
}
std :: cout << "n";
}
return 0;
}
它基本上使用在一大块纯一维数组中分配/访问数组的逻辑
另一种方法是使用指向指针的指针,如下所示:
#include <iostream>
int main (){
int dim1{5}, dim2{8};
float** varr = static_cast<float**> (aligned_alloc(sizeof(float*)*dim1, sizeof(float*)*dim1));
for(int i=0; i<dim1; ++i){
varr[i] = static_cast<float*> (aligned_alloc(sizeof(float)*dim2, sizeof(float)*dim2));
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
varr[i][j] = 0.1 + static_cast<float>(i*dim2 + j);
}
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
std::cout << &varr[i][j] << ",";
}
std :: cout << "n";
}
return 0;
}
但这样做的问题是内存在第一维度上没有对齐,dim1
.
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '