在设计内存管理器时,经常需要根据内存的size找到对应的数组index,查表是个不错的解决办法。

假设有一个数组,数组中每个元素代表一个范围,任意给定一个数,要尽可能快得找到其对应的数组索引,有什么好的办法么?

例如,数组为范围  [0,1) [1,2) [2,4) [4,8) [8,16) [16,32) [32,64) [64,128)

索引    0     1     2     3     4       5       6       7

给定一个数37,那么由于在[32,64)范围内,故应返回索引6.通过以下程序可生成一张索引表:

#include

#define MIN_MASK 5

#define MAX_MASK 12

#define MIN_VALUE (1<

#define MAX_VALUE (1<

#define DIF_VAL (1<

#define ONELINE_MASK 4

#define ONELINE (1<

int main(void)

{

FILE* fp=fopen("data.txt","w");

fprintf(fp,"static char index_table[]={\n\t");

int idx=0,idv=1,lnc=1,i;

for(i=0;i

{

if(i>=idv)

{

idx++;idv<<=1;

}

if(lnc>ONELINE)

{

fprintf(fp,"\n\t");

lnc=1;

}

fprintf(fp,"%d, ",idx);

}

fprintf(fp,"\n};");

fclose(fp);

return 0;

}

生成如下查找表

static char index_table[]={

0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,

5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

};

~

则可通过size_to_index完成从size到index的转换int size_to_index(unsigned int

size)

{ return index_table[size >> MIN_MASK];}

c语言查表程序,C语言查表法问题相关推荐

  1. c语言定时器实验程序,C语言定时器实验.doc

    C语言定时器实验 实验三 C语言定时器实验 一.实验目的 1.进一步熟悉DSP的中断机制 2.在掌握中断服务程序编写的基础上进一步熟悉定时器的运用 3.进一步掌握如何编写DSP中断服务子程序 二.实验 ...

  2. 趣味c语言代码,趣味程序C语言

    <趣味程序C语言>由会员分享,可在线阅读,更多相关<趣味程序C语言(36页珍藏版)>请在人人文库网上搜索. 1.趣味程序导学C语言,你玩过电脑游戏吗?,你喜欢电脑游戏吗?,电脑 ...

  3. c语言行计数程序,C语言非常简单的字符统计程序50行

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 该程序用于实现linux系统中wc命令的最简单模式 wc 命令用于统计文件中字符信息. [xx@localhost 1.5]$ wc 01.c 02.c ...

  4. c语言商场收款程序,c语言 如何用switch语句编写一个有关商场购物金额优惠的选择程式...

    c语言 如何用switch语句编写一个有关商场购物金额优惠的选择程式以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语 ...

  5. c语言中用temp程序,e__temp_c语言第02章作业.doc

    e__temp_c语言第02章作业 C语言程序设计第02章作业 单选题 1.假定有以下变量定义:int k=7,x=12; 则能使值为3 的表达式是_______. A)x%=(k%=5) B)x%= ...

  6. c语言银行存钱程序,c语言银行存钱.doc

    c语言银行存钱 红河学院工学院 课 程 设 计 报 告 专业:计算机技术与科学 年级: 11 级 学号:6 姓名: 曹 永 前 成绩: 批改时间: 红河学院 工学院编制说 明 1.本报告供学生课程设计 ...

  7. c语言英文排版程序,C语言设计—英文排版系统精品.docx

    一.C语言课程设计的目的: 高级语言课程设计是学习完<高级语言程序设计>课程后进行的一次全面的综合性上机实验.其目 的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和 ...

  8. c语言字符游动程序,C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位 ...

  9. c语言malloc函数程序,c语言 malloc函数详解

    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道. 1.关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: ...

最新文章

  1. 缓冲区溢出基本C程序的控制台和Win32版本
  2. idea命令行运行多个客户端_推荐一款神仙颜值的 Redis 客户端工具,开源啦
  3. mysql脚本编写与案例_MySQL语句执行顺序和编写顺序实例解析
  4. python错误集合
  5. Linux Crontab 详解
  6. android 保留edittext中的文字不被后面添加的文字覆盖_【Go语言绘图】图片添加文字(一)...
  7. python中tree安装_Python 学习笔记:Jupyter Notebook 的安装使用以及 tree 路径变更
  8. mysql有varchar2吗_char、varchar、varchar2区别
  9. 声纹识别技术的现状、局限与趋势
  10. 【优化调度】基于NSGAII算法的车辆充电调度策略研究含Matlab代码
  11. 数字货币智能合约:分析以太坊信标链
  12. 使用JLink SEGGER_RTT_printf()函数实现打印浮点数
  13. Linux-C C语言编译过程
  14. 设计模式的六大原则(SOLID)
  15. 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL、JNL、JNG、JG、JCXZ、JECXZ、JMP、JMPE
  16. 嵌入式设备启动过程(ARM )
  17. ORA-22835:缓冲区对于CLOB到CHAR转换或BLOB到RAWZ转换而言太小。
  18. vue+supermap三维地图(场景 模型 打包问题 报错)
  19. “无实物尝百味”通过控制微电流刺激产生味觉—3.复位配网和电量报警实现篇
  20. ZigBee网络基础

热门文章

  1. Web3的流支付代表Zebec,熊市布局的价值逻辑
  2. Gluster升级遇到的问题
  3. 程序员软技能:职场、学习、生活,代码之外生存之南
  4. 甲骨文携手各界共庆Java 20周年
  5. Wireshark分析网络慢
  6. 《鬼谷子》飞箝第五(原文)
  7. ocr移动端名片识别
  8. 重整旗鼓学java之java基础
  9. 撼龙图怎么开鸿蒙炁灵,一人之下藏金图技巧-一人之下撼龙藏金图高概率出绝世炁灵技巧...
  10. JixiPix Romantic Photo for Mac(照片浪漫效果软件)