我的计算机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语言中(如您的代码所示),您可以使用三重指针和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
我不知道您想在该程序中达到什么目标,以及遇到什么问题。您的问题不清楚,但您提出的问题
我应该如何定义动态数组?
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)));
我会在这里提出任何问题之前建议,请做一些研究。