当前位置: 首页 > news >正文

深圳网站建设网络易观数据

深圳网站建设网络,易观数据,施工企业的期间费用包括,广东网络推广运营源码说明 源码包含memory.h 和 memory.c 两个文件#xff08;嵌入式C/C代码的“标配”#xff09;#xff0c;其源码中包含重要的注释。 memory.h文件包含结构体等定义#xff0c;函数API申明等#xff1b; memory.c文件是实现内存管理相关API函数的原型。 memory.h …源码说明 源码包含memory.h 和 memory.c 两个文件嵌入式C/C代码的“标配”其源码中包含重要的注释。 memory.h文件包含结构体等定义函数API申明等 memory.c文件是实现内存管理相关API函数的原型。 memory.h 头文件是相关的定义和申请 #ifndef __MEMORY_H__ #define __MEMORY_H__#include stdio.h #include string.h #include includes.h //用户使用 typedef struct {void *addr; //申请到的内存的起始地址uint32_t size; //申请到的内存的大小按照块大小分配大于等于申请大小uint16_t tb; //申请表序号申请内存时分配释放内存时使用用户不使用 }DMEM; //若返回空则申请失败 DMEM *DynMemGet(uint32_t size);void DynMemPut(DMEM *pDmem);#endif //__M 这里的代码比较简单也是常规的写法重点是要理解结构体成员的含义。 memory.c 源文件主要就是实现内存管理的函数源码比较多这里才分为三部分。 1.相关的定义 #include memory.h #define DMEM_BLOCK_SIZE 256 //内存块大小为128字节 #define DMEM_BLOCK_NUM 20 //内存块个数为40个 #define DMEM_TOTAL_SIZE (DMEM_BLOCK_SIZE*DMEM_BLOCK_NUM) //内存总大小 static uint8_t DMEMORY[DMEM_TOTAL_SIZE]; static DMEM_STATE DMEMS {0}; typedef enum { DMEM_FREE 0, DMEM_USED 1, }DMEM_USED_ITEM; typedef struct { DMEM_USED_ITEM used; //使用状态 uint16_t blk_s; //起始块序号 uint16_t blk_num; //块个数 }DMEM_APPLY; typedef struct { DMEM_USED_ITEM tb_blk[DMEM_BLOCK_NUM]; DMEM tb_user[DMEM_BLOCK_NUM]; //用户申请内存信息 DMEM_APPLY tb_apply[DMEM_BLOCK_NUM]; //系统分配内存信息 uint16_t apply_num; //内存申请表占用数目 uint16_t blk_num; //内存块占用数目 }DMEM_STATE; 2.内存分配函数DynMemGet DMEM *DynMemGet(uint32_t size) { uint16_t loop 0; uint16_t find 0; uint16_t blk_num_want 0; DMEM * user NULL; DMEM_APPLY *apply NULL; //申请内存大小不能为0 if(size 0) { return NULL; } //申请内存不可超过总内存大小 if(size DMEM_TOTAL_SIZE) { return NULL; } //申请内存不可超过剩余内存大小 if(size (DMEM_BLOCK_NUM - DMEMS.blk_num) * DMEM_BLOCK_SIZE) { return NULL; } //申请表必须有空余 if(DMEMS.apply_num DMEM_BLOCK_NUM) { return NULL; } //计算所需连续块的个数 blk_num_want (size DMEM_BLOCK_SIZE - 1) / DMEM_BLOCK_SIZE; //寻找申请表 for(loop 0; loop DMEM_BLOCK_NUM; loop) { if(DMEMS.tb_apply[loop].used DMEM_FREE) { apply DMEMS.tb_apply[loop]; //申请表已找到 user DMEMS.tb_user[loop]; //用户表对应找到 user-tb loop; //申请表编号记录 user-size blk_num_want * DMEM_BLOCK_SIZE; //分配大小计算 break; } } //没有找到可用申请表理论上是不会出现此现象的申请表剩余已在上面校验 if(loop DMEM_BLOCK_NUM) { return NULL; } //寻找连续内存块 for(loop 0; loop DMEM_BLOCK_NUM; loop) { if(DMEMS.tb_blk[loop] DMEM_FREE) {//找到第一个空闲内存块 for(find 1; (find blk_num_want) (loop find DMEM_BLOCK_NUM); find ) {//找到下一个空闲内存块 if(DMEMS.tb_blk[loop find] ! DMEM_FREE) {//发现已使用内存块 break; } } if(find blk_num_want) {//寻找到的空闲内存块数目已经够用 user-addr DMEMORY loop * DMEM_BLOCK_SIZE; //计算申请到的内存的地址 apply-blk_s loop; //记录申请到的内存块首序号 apply-blk_num blk_num_want; //记录申请到的内存块数目 for(find 0 ; find apply-blk_num; find) { DMEMS.tb_blk[loop find] DMEM_USED; } apply-used DMEM_USED; //标记申请表已使用 DMEMS.apply_num 1; DMEMS.blk_num blk_num_want; return user; } else {//寻找到的空闲内存块不够用从下一个开始找 loop find; } } } //搜索整个内存块未找到大小适合的空间 return NULL; } 3.内存释放函数DynMemPut void DynMemPut(DMEM *user) { uint16_t loop 0; //若参数为空直接返回 if(NULL user) { return; } //释放内存空间 for(loop DMEMS.tb_apply[user-tb].blk_s; loop DMEMS.tb_apply[user-tb].blk_s DMEMS.tb_apply[user-tb].blk_num; loop) { DMEMS.tb_blk[loop] DMEM_FREE; DMEMS.blk_num - 1; } //释放申请表 DMEMS.tb_apply[user-tb].used DMEM_FREE; DMEMS.apply_num - 1; }
http://www.sadfv.cn/news/23388/

相关文章:

  • 哪些是网站建设自己做网站名电子章违法吗
  • 火烈鸟门户网站开发网站建设方面的销售经验
  • 建筑行业资讯网站弹幕网站如何做
  • 成品网站管理系统 源码免费网络教学平台
  • 建网站建设网站北京ui培训机构排行
  • 网站建设自学 优帮云学做网站论坛会员账号
  • 网站首页版式cdn资源访问出现问题怎么办
  • 做720效果的还有哪个网站360建筑网怎么重新注册
  • 网站建设服务器是什么意思溧阳有做网站的吗
  • 网站建设单选按钮广告设计专业简历
  • 珠海十大网站建设公司排名公司注册网上核名流程
  • 文学类网站模板wordpress建站流量
  • 做网站有名的公司有哪些手机网站建设教程视频
  • 网站的排版好看欧美网站建设
  • 岳阳整站优化网站开发常见问题
  • 网站设计行业前景贵卅省住房和城乡建设厅网站
  • 无锡网站制作无锡做网站广州17做网站
  • 二手东西网站怎么做免费网站建设社区
  • 网站建设发展状况网页制作网站图片
  • 网站运行费用一般多少深圳住房城乡建设局网站
  • 外贸网站怎么换域名软件开发入门教程自学
  • iis 显示网站建设中第三方微信网站建设
  • 一般网站的建设步骤有哪些工厂拿货回家加工
  • 长沙长沙网站建设公司免费做mc皮肤网站
  • 深圳网站建设公司公司深圳市中心是哪个区
  • 广东企业网站seo哪里好聊城做网站的公司案例
  • 苏州网站建设信息网络wordpress建站需要学什么意思
  • 扬州开发区建设局网站陕西省建设厅便民服务网站
  • typecho做网站小程序用什么开发
  • 湖南省郴州市汝城县站长工具seo综合查询关键词