AGe*_*eek 0 c arrays dynamic-arrays
如何创建一个非常大的数组?好吧,我无法创建一个大小为INT_MAX的数组..怎么可能实现这一点.
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define SIZE 2147483647
int main() {
int *array;
unsigned int i;
array = malloc(sizeof(int) * SIZE);
if(array == NULL) {
fprintf(stderr, "Could not allocate that much memory");
return 1; }
for(i=0; i<1; i++) {
array[0] = 0;
}
free(array);
}
Run Code Online (Sandbox Code Playgroud)
你几乎肯定会达到平台限制.如果您只有32位地址空间,那么4G就是您希望解决的问题.实际上,由于地址空间的一部分将被其他东西占用,因此它将会少得多.
使用64位地址空间,它可能是可能的,但是,一旦达到该级别的分配,您应该问自己是否真的有必要.
解决问题的一种方法是使用诸如磁盘之类的内存不足存储,并且只将内存带入所需内容.
换句话说,将数据结构分段为(例如)1M块并一次处理1M.
根据数据结构的使用模式,您可以使用大量缓存算法来有效地执行此操作.
例如,对于真正的顺序访问,一次可以在内存中有一个块.对于真正的随机访问,您可能希望在缓存方案中一次在内存中有多个块 - 每个内存中结构都存储1M的数据及其在内存不足存储中的位置,因此您可以使用LRU算法并回写脏数据,等等.