首页 > 解决方案 > 如何创建数组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] = .....;

标签: c++arrays

解决方案


我不确定 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.


推荐阅读