请问C语言中大数组如何处理?

来源:百度知道 编辑:UC知道 时间:2024/05/20 23:17:32
以下程序需要在DSP中运行,但是只有10K全局mem,
大数组数据是程序生成固定的,请问如何压缩这个数组,才能够在10K全局mem中运行?

下面由于百杜限定粘贴字数,因此省略了一些数组数据

谢谢!

main()
{
int i;
int _maxSchedule = 41502;
int _toSchedule[41502] =
{
2,3,4,5,7,9,11,4,5,7,
9,10,11,12,7,8,9,10,11,12,
0,1,2,3,4,5,6,7,8,9,
10,11,12,13,0,1,2,3,4,5,

2,3,4,5,6,13,0,1,2,3,
4,5,6,13,0,1,2,3,4,5,
6,13,0,1,2,3,4,5,6,13,
0,1,2,3,4,5,6,13,0,1,
2,3,4,5,6,13,0,1,2,3,
4,5,6,13,0,1,2,3,4,5,
6,13,0,1,2,3,4,5,6,13,
0,1,2,3,4,5,6,13,0,1,
2,3,4,5,6,13,0,1,2,3,
4,5,6,13,0,1,2,3,4,5,
6,13,0,1,2,3,4,5,6,13,
0,1,2,3,4,5,6,13,0,1,
2,3,4,5,6,13,0,1,2,3,
4,5,6,13,0,1,2,3,4,5,
6,13,0,1,2,3,4,5,6,13,
14,15,0,1,2,3,4,5,6,13,
0,1,2,3,4,5,6,13,0,1,
2,3,4,5,6,13,0,1,2,3,
............
};
for(i=0;i<_maxSchedule; i++){
if(i%10==0)printf("\n");
printf("%i ", _toSchedule[i]);

你仔细看看这些数据都是有规律的,有相当大的一部分都是0 1 2 3 4 5 6 13重复了很多次。统计一下这些循环出现了多少次,如果考虑这个因素,压缩还是可以的。
否则的话,所有的数据都是0-15区间的整数,即使考虑使用4位二进制压缩,1个字节(8 bit)可以存2个整数,41502个数也需要20K byte,已经超过内存上限了...
如果数据没有规律,而且实在要压缩的话,考虑用霍夫曼编码可能好一些,不过我估计也挺悬的。可以考虑其他方式,不要保存在内存中,程序运行时需要哪一部分数据再读进来。

压缩只有用算法了
或者你把这些数换成byte