当前位置: 首页 > 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://wiki.neutronadmin.com/news/23388/

相关文章:

  • 单页营销网站设计wordpress电子商城
  • 成都网络公司网站中山哪里做网站
  • 建设实业公司网站设计模板龙岗网站建设联系电话
  • 江苏营销型网站推广上海cms建站
  • 网站开发中数据库的功能怎么用h5做网站
  • 网站 建设 原则题库小程序源码
  • 青白江网站建设老的网站为什么要改版新网站
  • 怎么做网站或APP眉山建设网站
  • 亚马逊中国官网网站品牌建设是指什么
  • wordpress整站备份插件珠海网站建设托管
  • 网站页面如何设计图做网站优化企业
  • 网站cms分站系统网页游戏排行榜前十微信小程序
  • 江门市建设工程安全监督网站泰州网站建设价格
  • 大型网站后台登录地址一般是如何设置的在线营销型网站制作
  • 广州信科做网站微商怎么做 和淘宝网站一样吗
  • 佛山营销型建设网站网站建设尺寸像素是多少钱
  • 阿里云服务器如何配置多网站关于色彩搭配的网站
  • 郑州医疗网站开发管理咨询合同
  • 巩义做网站汉狮网络贵阳个人做网站
  • 天长哪个广告公司做网站昆山做轮胎网站
  • 南京医院手机网站建设网络规划与设计专业
  • 网站前台做哪些工作做旅游网站当地人服务赚钱吗
  • 自适应网站做推广国家企业信用信息系统(河南)
  • 免费网站app源码教育网站 前置审批
  • 百度网站做防水补漏网站开发包含什么
  • 网站建设销售发展前景东营网站制作公司
  • 做网站后租服务器一年多少钱wordpress 数据备份插件
  • 广西城市建设学校官方网站服装网络营销推广案例
  • mip网站有什么好处廊坊百度优化
  • 商丘做建设网站的公司网站更换备案号