如何动态分配大型3维数组?

问题描述 投票:-2回答:2

我的计算机RAM具有32GB的可用内存。我想定义一个1500 * 1500 * 500大小的数组。如何定义动态数组?

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#include <openacc.h>
#include<time.h>
#include <string.h>
#include <cuda_runtime_api.h>
void main(void)
{
#define NX 1501
#define NY 1501
#define NZ 501
int  i, j, k, l, m,dt,nstop;
double  comp;
dt=5;
nstop=5
static double ex[NX][NY][NZ] = { 0. }, ey[NX][NY][NZ] = { 0. }, ez[NX][NY][NZ] = { 0. };
static double hx[NX][NY][NZ] = { 1. }, hy[NX][NY][NZ] = { 0. }, hz[NX][NY][NZ] = { 1. };
static double  t, comp;

FILE *file;

file = fopen("point A hm=0.csv", "w"); /* Output data file name */

t = 0.;

for (l = 0; l < nstop; l++) {

for (i = 0; i < NX - 1; i++) {
for (j = 1; j < NY - 1; j++) {
for (k = 1; k < NZ - 1; k++) {

ex[i][j][k] =  2* ey[i][j][k]
+ 3* (hz[i][j][k] - hx[i][j - 1][k])
- 5* (hy[i][j][k] - 2*hz[i][j][k - 1]);
}
}
}

comp = ((double)(l + 1) / nstop)*100.;
printf("Computation: %4.3f %% completed \r", comp);
fprintf(file, "%e, %e \n", t*1e6, -ex[1200][950][20] + ex[1170][950][20]) / 2.);
t = t + dt;
}

fclose(file);


} 
c++ c arrays memory-management
2个回答
0
投票

例如,在C语言中(如您的代码所示),您可以使用三重指针和malloc()来实现您想要的:

#define NX 1501
#define NY 1501
#define NZ 501

int*** p_a = malloc(sizeof(double*) * NX);

for (int i = 0; i < NX; i++)
{
    p_a[i] = malloc(sizeof(double*) * NX)

    for (int j = 0; j < NY; j++)
        p_a[i][j] = malloc(sizeof(double) * NZ);
}

在C ++中,最常见,最有效的方法是使用std::vector动态分配数组:

std::vector

-1
投票

我不知道您想在该程序中达到什么目标,以及遇到什么问题。您的问题不清楚,但您提出的问题

我应该如何定义动态数组?

std :: vector用于c ++中的动态数组。#define NX 1501 #define NY 1501 #define NZ 501 std::vector<std::vector<std::vector<double>>> a(NX, vector<vector<double>>(NY, vector<double>(NZ)));

我会在这里提出任何问题之前建议,请做一些研究。

© www.soinside.com 2019 - 2024. All rights reserved.