博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言实现一种简单的应用服务器内部数据结构的思路(二)
阅读量:6572 次
发布时间:2019-06-24

本文共 1208 字,大约阅读时间需要 4 分钟。

hot3.png

    本文在前文的基础上做了一下扩展

内部数据结构定义

内部的数据结构配置文件可采用xml文件形式,文件格式其实很简单,例子如下
比如这次内部结构含4个字段,含一次交易信息的卡号,金额,交易日期,交易时间,载入这个配置后,内存中的数据映射关系如下:
数据key 长度 偏移
cardNo 19
amount 13 20
tradeDate 8 36
tradeTime 6 48
考虑到计算效率,比如32系统中,实际分配的存储长度是比xml文件配置的长度大的最小的4的整数倍数,这样偏移量就是4的整数倍。

数据内部存储与访问方式

数据的内部存储方式可用字符串形式,不管是整数,浮点数,数据读取和写入的接口最核心的就是类似这种形式: 

int getDataStr(const void* dataAddr, const char* szKey, const int iBufLen, char* szValue);int putDataStr(void* dataAddr, const char* szKey, const char* szValue);

dataAddr是所有的数据存储地址,根据szKey查找到对应数据的偏移(如果数据域多可在载入配置后可将key排序,查找时通过二分查找等方法),之后进行读取或者写入,至于其他的类型在这个基础上将字符与成整型,浮点型等互转即可。而且数据内部天然带长度,在写入的时候可以进行检查,不能超过xml文件中的长度,在一个地方限制了内存溢出的BUG。

int getDataInt(const void* dataAddr, const char* szKey, int* iValue);int setDataInt(void* dataAddr, const char* szKey, const int iValue);int getDataDouble(const void* dataAddr, const char* szKey, double* dValue);int setDataDouble(void* dataAddr, const char* szKey, const double dValue);

到此已经完成了一个最简单的设计,相对真正的动态Map的实现最大的区别是所有用到的值的key必须预先定义好,但是值所放置的位置在载入时都已经确定,在访问时不需要进行动态的内存申请和释放,保证了一定的效率,而且在Linux/Unix系统中,内部结构数据可放在共享内存中,这样多进程都可访问(若有需要可将数据的访问接口实现成线程安全的),无需将数据在进程间进行传递。

转载于:https://my.oschina.net/onethin/blog/31900

你可能感兴趣的文章
mysql优化:连接数
查看>>
github的使用(git shell )
查看>>
如何优化js代码(1)——字符串的拼接
查看>>
PHP 时间操作 / 跳转问题
查看>>
Windows 2012 R2 FSMO角色相关小记录
查看>>
2017年6月12日笔记
查看>>
(小蚂蚁站长吧)网站优化做好这八步你就是seo第一
查看>>
使用流的方式往页面前台输出图片
查看>>
java核心技术反射
查看>>
我的友情链接
查看>>
Maven创建新的依赖项目
查看>>
2015年10月26日作业
查看>>
LAMP,安装脚本
查看>>
面向对象题目
查看>>
Java异常总结
查看>>
DHCP
查看>>
电脑上怎样压缩图片大小
查看>>
新来的发一个帖子
查看>>
Nginx 支持webSocket 响应403
查看>>
lnmp安装
查看>>