第1页共17页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共17页钢筋混凝土的UNIXC编程技巧(一、内存映射表)前言:大学毕业后从事unix上的银行综合业务系统开发工作已有一年半的时间,向众多前辈高手学习了很多经验和技巧,自己也创新了些好的开发技术,特写出来与奋斗在一线的unix程序员们共享
本人大学时专注于windows平台应用开发,工作后才转入unix平台,故沿袭了不少windows编码风格
--------------------------------------------------------------------------------正文:在一个带有数据库的unix系统中进行E-SQL嵌入式开发,必然用到很多混合式编程方式
当系统对表的SELECT操作频繁时,会使数据库效率大幅下降
于是我们很当然的这样设计:当应用开始运行时把数据库中需要频繁查询的表装载入共享内存,通过编写一批共享内存查询函数实现对表数据的快速查询、定位
这里借用windows的一些名词把这一技术命名为“内存映射表”技术
内存映射表的格式设计有很多方式,下面介绍一下我设计的一种格式,该格式已经应用于某省级银行信用卡全省大前置系统,取得非常好的效果
||||||内存映射表记录条数|第一条记录结构单元|第二条记录结构单元|
||10个字节|记录结构的大小|记录结构的大小|||||||共享内存数据存放格式如上图所示
开头的10个字节存放内存映射表的记录条数数值,由于标准c的有符号长整数类型最大值约为21亿,所以预留10个字节存放ASCII编码的记录条数数值已绰绰有余且取得最大限度值了
第11个字节开始存放数据库表第一条记录对应的c语言结构体,称为一个结构单元
后面依次存放所有数据库表记录形成结构体数组
一张数据库表装载入一块共享内存,可以通过表名给共享内存的i