user-0 提问: 如何用C处理大型多维数组？

回复:
user: user-1
content: 你搞这么大，栈区是不是会受不了，可能有的时候会出现overflow

user: user-2
content: 写成文件，内存映射！

user: user-3
content: 尺寸从小到大： 堆栈＜全局数据＜堆＜内存映射文件＜文件＜硬盘＜硬盘阵列＜云存储＜整个互联网

user: user-4
content: 引用 10 楼 u013601471 的回复:那除了这个方法之外，有没有其他比较常用的方法了啊？  除了动态分配内存，我想不出来还能玩出什么花样了  不管怎么写，肯定都是要建立在动态分配内存的基础上的

user: user-0
content: 引用 9 楼 zilaishuichina 的回复:[quote=引用 8 楼 u013601471 的回复:] [quote=引用 5 楼 zilaishuichina 的回复:] float *beta_gama = new float[YEARS * ROWS * COLS]; float *beta_average = new float[ROWS * COLS]; float *gama_average = new float[ROWS * COLS];  如果还不行 float **beta_gama = new float *[YEARS]; for (int i = 0; i < YEARS; i++) {     beta_gama[i] = new float[ROWS * COLS]; }  如果还不行 以此类推  hi，用指针进行数组计算简直就是噩梦啊。。。三维指针的交叉运算更是梦魇啊。。。[/quote]   typedef float* floatp; typedef float** floatpp; typedef float*** floatppp;  int _tmain(int argc, _TCHAR* argv[]) { 	float a = 1.0f; 	floatppp beta_gama = new floatpp[3]; 	for (int i = 0; i < 3; i++) 	{ 		beta_gama[i] = new floatp[3]; 		for (int j = 0; j < 3; j++) 		{ 			beta_gama[i][j] = new float[3]; 			for (int k = 0; k < 3; k++) 			{ 				beta_gama[i][j][k] = a; 				a = a + 1; 			} 		} 	}  	for (int i = 0; i < 3; i++) 	{ 		for (int j = 0; j < 3; j++) 		{ 			for (int k = 0; k < 3; k++) 			{ 				printf("%f\n", beta_gama[i][j][k]); 			} 		} 	}  	for (int i = 0; i < 3; i++) 	{ 		for (int j = 0; j < 3; j++) 		{ 			delete[] beta_gama[i][j]; 		} 		delete[] beta_gama[i]; 	} 	delete[] beta_gama; } 和你使用普通数组 没区别了吧[/quote]  给大神跪了！ 那除了这个方法之外，有没有其他比较常用的方法了啊？

user: user-4
content: 引用 8 楼 u013601471 的回复:[quote=引用 5 楼 zilaishuichina 的回复:] float *beta_gama = new float[YEARS * ROWS * COLS]; float *beta_average = new float[ROWS * COLS]; float *gama_average = new float[ROWS * COLS];  如果还不行 float **beta_gama = new float *[YEARS]; for (int i = 0; i < YEARS; i++) {     beta_gama[i] = new float[ROWS * COLS]; }  如果还不行 以此类推  hi，用指针进行数组计算简直就是噩梦啊。。。三维指针的交叉运算更是梦魇啊。。。[/quote]   typedef float* floatp; typedef float** floatpp; typedef float*** floatppp;  int _tmain(int argc, _TCHAR* argv[]) { 	float a = 1.0f; 	floatppp beta_gama = new floatpp[3]; 	for (int i = 0; i < 3; i++) 	{ 		beta_gama[i] = new floatp[3]; 		for (int j = 0; j < 3; j++) 		{ 			beta_gama[i][j] = new float[3]; 			for (int k = 0; k < 3; k++) 			{ 				beta_gama[i][j][k] = a; 				a = a + 1; 			} 		} 	}  	for (int i = 0; i < 3; i++) 	{ 		for (int j = 0; j < 3; j++) 		{ 			for (int k = 0; k < 3; k++) 			{ 				printf("%f\n", beta_gama[i][j][k]); 			} 		} 	}  	for (int i = 0; i < 3; i++) 	{ 		for (int j = 0; j < 3; j++) 		{ 			delete[] beta_gama[i][j]; 		} 		delete[] beta_gama[i]; 	} 	delete[] beta_gama; } 和你使用普通数组 没区别了吧

user: user-0
content: 引用 5 楼 zilaishuichina 的回复:float *beta_gama = new float[YEARS * ROWS * COLS]; float *beta_average = new float[ROWS * COLS]; float *gama_average = new float[ROWS * COLS];  如果还不行 float **beta_gama = new float *[YEARS]; for (int i = 0; i < YEARS; i++) {     beta_gama[i] = new float[ROWS * COLS]; }  如果还不行 以此类推  hi，用指针进行数组计算简直就是噩梦啊。。。三维指针的交叉运算更是梦魇啊。。。

user: user-5
content: malloc 啊。动态分配。

user: user-6
content: 栈空间有限，虽然能改大，但还是远远小于堆

user: user-4
content: float *beta_gama = new float[YEARS * ROWS * COLS]; float *beta_average = new float[ROWS * COLS]; float *gama_average = new float[ROWS * COLS];  如果还不行 float **beta_gama = new float *[YEARS]; for (int i = 0; i < YEARS; i++) {     beta_gama[i] = new float[ROWS * COLS]; }  如果还不行 以此类推

user: user-0
content: 引用 1 楼 user-9 的回复:不要这么玩，这么大的东西一定要在程序初始化的时候动态申请内存 你初始化一下这些数据的话，你这个有多大，你的可执行文件就有多大 这些数据都是从文件中读进来的，可执行文件不大。动态申请内存没有限制吗？怎么写啊？

user: user-7
content: mmap?内存映射~~

user: user-8
content: 动态申请吧...

user: user-9
content: 不要这么玩，这么大的东西一定要在程序初始化的时候动态申请内存 你初始化一下这些数据的话，你这个有多大，你的可执行文件就有多大