如何优化纯C静态二维数组
1. 问题背景
纯C代码使用静态二维数组管理核心数据,例如:
typedef struct Data_s
{
char valid; // 表示该块数据已经使用
char id;
//...
//...
} Data;
Data data[MAX_A][MAX_B];
MAX_A和MAX_B都小于50,但不能修改(因为是业务规格)
程序运行时,根据外部动态请求把单个数据元素写到data数组中,如:
AddData(Data * element, int a, int id);
把单个数据写到data[a][?]中,?是未使用(空闲)的元素,id是数据元素的唯一标号(在同一行内唯一,在不同行之间不唯一),id的范围0-255
访问数据时,按下标a加上id搜索,如:
ReadDataByID(Data * element, int a, char id);
现有代码是用for循环搜索id,效率为O(n)
2. 目标
因为开这个静态二维数组导致内存基本占满(非PC应用),但实际数组中有大量空闲元素,所以希望提高内存的使用率
同时,希望在整体内存使用减少的条件下,用部分内存来换取访问数据的速度提升
请问大家有什么想法,或者思路?
我的想法在下面,如果有错误,也尽管提
谢谢!
纯C代码使用静态二维数组管理核心数据,例如:
typedef struct Data_s
{
char valid; // 表示该块数据已经使用
char id;
//...
//...
} Data;
Data data[MAX_A][MAX_B];
MAX_A和MAX_B都小于50,但不能修改(因为是业务规格)
程序运行时,根据外部动态请求把单个数据元素写到data数组中,如:
AddData(Data * element, int a, int id);
把单个数据写到data[a][?]中,?是未使用(空闲)的元素,id是数据元素的唯一标号(在同一行内唯一,在不同行之间不唯一),id的范围0-255
访问数据时,按下标a加上id搜索,如:
ReadDataByID(Data * element, int a, char id);
现有代码是用for循环搜索id,效率为O(n)
2. 目标
因为开这个静态二维数组导致内存基本占满(非PC应用),但实际数组中有大量空闲元素,所以希望提高内存的使用率
同时,希望在整体内存使用减少的条件下,用部分内存来换取访问数据的速度提升
请问大家有什么想法,或者思路?
我的想法在下面,如果有错误,也尽管提
谢谢!
...全文
相关推荐
2048纯c语言 //亲测可用
基于c语言可发了2048小游戏,运行之后就能玩,界面超简单。
STM32F103可用的轻量级C语言QR码生成代码(已修复嵌入式平台兼容性问题)
专为STM32F103VE T6单片机优化的纯C QR码生成实现,解决原跨平台代码在ARM Cortex-M3架构下输出异常的问题。核心调整包括移除static修饰符、重写RS纠错码表访问逻辑,改用直接数组索引方式替代易出错的const unsigned char *指针多维引用,适配MCU有限RAM与严格内存对齐要求。包含QR_Encode.c和QR_Encode.h两个主文件、统一基础类型定义data_type.h,以及一份实测可用的Keil/STM32CubeIDE集成说明txt。不依赖C++、STL
100%纯Haskell中的矩阵运算_Haskell_下载.zip
100%纯Haskell中的矩阵运算_Haskell_下载.zip
c语言五子棋小游戏课程设计报告
c语言完成的五子棋小游戏课程设计报告,不含源程序。。
用二C语言求二维数组鞍点
用二C语言求二维数组鞍点 有程序和文档。



