当前位置: 首页 > 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.huolong8.cn/news/23388/

相关文章:

  • 网站建设及推广人员网站建设 logo
  • 网站搭建报价表wordpress媒体库分离
  • 商城手机网站建设马云有没有学过做网站
  • 建设银行交易明细查询网站市场推广专员
  • 网站建设师百度百科怎么看得出网站是哪个公司做的
  • 企业网站制作icp备案域名网站备案信息
  • wordpress公司网站做公司官网需要什么条件
  • 邯郸移动网站制作wordpress 4.9.1模板
  • 石家庄万达网站制作免费微信小程序官网
  • 泉州网站建设科技公司上海外贸学院
  • 网站内容建设策略做网站英文
  • 地方网站怎么做挣钱国际贸易交易平台有哪些
  • 泰州公司做网站金乡做网站 亿九
  • wordpress搭建下载站点wordpress 邮箱登录插件
  • 迁西县住房和城乡规划建设局网站义乌公司网站建设
  • 打电话叫人做网站网站防止恶意注册
  • 网站制作应用知识网站开发的大学生应届简历
  • 有pc网站 移动网站怎么做宝塔无法安装wordpress
  • 专门做瑜伽的网站使用top域名做网站
  • 茶叶网站建设要求佛山市企业网站建设报价
  • 网站加黑链免费域名如何建站
  • 北京住房建设厅网站正保建设工程网站
  • 网络网站成都旅游线路
  • 湛江找人做网站排名wordpress 虚拟
  • 怎么制作网站模板杭州模板网站制作方案
  • 淘客app网站是怎么做的vue cms 网站开发
  • 东莞seo建站投放南宁市有哪些做网站的外包企业
  • 网站建设评分标准小学教育网站专题模板
  • 南宁建站服务中美今天最新消息
  • 教育中介公司网站建设费用绵阳网站建设软件有哪些