c - 使用多个小数组代替大数组

标签 c arrays struct

为了提高代码的并行化,我尝试使用具有 17 个不同子数组的结构,而不是具有一个巨大的 17 维数组的结构,方法如下:

int n_1[box1];
int n_2[box2];
int n_3[box3];
int n_4[box4];
int n_5[box5];
int n_6[box6];
int n_7[box7];
int n_8[box8];
int n_9[memvara];
int n_10[memvarb];
int n_11[memvarc];
int n_12[memvard];
int n_13[adirect];
int n_14[tdirect];
int n_15[fs];
int n_16[bs];
int n_17[outputnum];

// Set up a pointer-based structure
typedef struct calookup_b
{
    int *n_1;
    int *n_2;
    int *n_3;
    int *n_4;
    int *n_5;
    int *n_6;
    int *n_7;
    int *n_8;
    int *n_9;
    int *n_10;
    int *n_11;
    int *n_12;
    int *n_13;
    int *n_14;
    int *n_15;
    int *n_16;
    int *n_17;
} calookup_b;

而不是当前在代码中大量使用的:

typedef struct calookup
{

    signed char n[box1][box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];
    double raw;
} calookup;

但是,当我遇到这样的电话时,我遇到了麻烦:

for (m = 0; m < outputnum; m++)
{
    behaviour[m] = calookup->n[s3][s4][s5][s6][wa][wb][aa][ab][a->memm[0]][a->memm[1]][a->memm[2]][a->memm[3]][a->lightdirection][a->lightsense][a->fsa][a->maxload][m];
... }

如何将两者等同?我应该编写一个具有 17 个以上输入的函数来返回巨型多维数组的值,还是有更优雅的方法?

最佳答案

17 维数组与 17 个数组不同。简单案例:

int array[3][3][3];  // This can hold 3x3x3 = 27 elements

int array1[3];
int array2[3];
int array3[3];       // Together, they can hold only 9 elements.

您可以使用:

int array1[3][3];
int array2[3][3];
int array3[3][3];    // Together, they can hold 27 elements.

类比 17 维数组...

数组:

signed char n[box1][box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];

可以转换为:

signed char n1[box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];
signed char n2[box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];

...

signed char nN[box2][box3][box4][box5][box6][box7][box8][memvara][memvarb][memvarc][memvard][adirect][tdirect][fs][bs][outputnum];

关于c - 使用多个小数组代替大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079362/

相关文章:

python - 如何获取包含 np.NAN 的二维数组在特定百分位数范围内的位置

c++ - 如何登录页面并从中读取url内容?

c - 从/proc/[pid]/pagemap 获取物理地址失败

python - 找到最重复的! np.数组!在列表中

C++ - 结构成员指向数组

c - typedef 结构混淆中的指针

swift - 如果传递很多,Swift 中的结构会导致内存问题吗?

c - 结构的指针算法

c - 将顺序代码转换为 openMP 并行结构

c# - 将用户输入返回到未定义的数组中?