c语言如何定义超过50万的大数组

Python022

c语言如何定义超过50万的大数组,第1张

由于栈大小的限制,这种规模的数组不能存在栈上,所以必须放在堆中。C语言中申请堆空间使用函数malloc:

#include <stdlib.h>

int *arr

arr = malloc(sizeof(int) * 500000)

if (arr == NULL)

    空间申请失败

注意要引用头文件stdlib.h

理论上,c语言数组最大的大小没有限制,因为它用的是 虚拟存储。

对于写程序而言,例如要写下标,那么受 unsigned int 最大值的限制,只能用到十六进制 0xffffffff, 十进制4G多一点。

具体程序能获取多大,就很难说,有时编译可以通过,运行时出错。你也可以用 malloc 动态分配请求,看分配是否成功或失败。

对一般程序而言,数组长度通常够用了。

你仔细看看这些数据都是有规律的,有相当大的一部分都是0 1 2 3 4 5 6 13重复了很多次。统计一下这些循环出现了多少次,如果考虑这个因素,压缩还是可以的。

否则的话,所有的数据都是0-15区间的整数,即使考虑使用4位二进制压缩,1个字节(8 bit)可以存2个整数,41502个数也需要20K byte,已经超过内存上限了...

如果数据没有规律,而且实在要压缩的话,考虑用霍夫曼编码可能好一些,不过我估计也挺悬的。可以考虑其他方式,不要保存在内存中,程序运行时需要哪一部分数据再读进来。