提示:现在内存区定出一片相当大的连续空间(如1000字节)。然后开辟与释放都在此空间进行。假设指针变量p原已指向未用空间的开头,调用alloc(n)后,开辟了n个字节可供程序适使用。现在需要使 p的值变为p+n,表示空白未用区从p+n地址开始,同时要将开辟区的起始地址(p)作为函数值返回,以表示可以利用从此点开始的单元。如果要开辟的区太大(n大),超过了预想的(1000)字符,则alloc(n)函数返回指针NULL,表示开辟失败。

#include <stdio.h>

#define LEN (1000)

unsigned char base[LEN];
unsigned char *p=(unsigned char *)base; void *Alloc(unsigned int n)
{
unsigned char *pp=p;
if(p+sizeof(unsigned int)+n<base+LEN&&n>)
{
*(unsigned int*)p=n;
p+=sizeof(unsigned int)+n;
pp+=sizeof(unsigned int);
}
else
{
pp=NULL;
}
return pp;
} void Free(unsigned char *ptr)
{
if(!ptr)
return;
p-=sizeof(unsigned int)+*(unsigned int *)(ptr-sizeof(unsigned int));
} int main()
{
unsigned char *a=NULL;
printf("base=%p,p=%p,a=%p\n",base,p,a);
a=Alloc();
printf("base=%p,p=%p,a=%p\n",base,p,a);
Free(a);
printf("base=%p,p=%p,a=%p\n",base,p,a);
return ;
}

最新文章

  1. Oozie 快速入门
  2. poj 3190 Stall Reservations
  3. WPF感悟
  4. java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板
  5. Oracle 导出HTML
  6. 依法使用Linux,反对Linux国产化
  7. 图片缩放+拖动(html)
  8. java 设计模式之工厂模式与反射的结合
  9. 在java中和javascript中过滤掉类似于img形式的字符串,从而不显示图片
  10. 用Spark学习FP Tree算法和PrefixSpan算法
  11. Shell脚本的颜色样式及属性控制
  12. 循环赛日程编排c代码
  13. AppCan移动开发技巧:3步走,获取移动APP签名信息
  14. (python数据分析)第03章 Python的数据结构、函数和文件
  15. C语言常用标准库函数
  16. A Spectral Technique for Correspondence Problems Using Pairwise Constraints
  17. sencha touch 开发环境搭建(视频)
  18. 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)
  19. (转)Jupyter notebook入门教程(上,下)
  20. [翻译] OrigamiEngine

热门文章

  1. WindowUtils【窗口工具类】
  2. ConfirmCancelDialog【确认取消对话框】
  3. Vue基础(环境配置、内部指令、全局API、选项、内置组件)
  4. 玩转SpringBoot之定时任务详解
  5. Dynamics 365 Customer Engagement中插件的调试
  6. .net开源工作流引擎ccflow Pop返回值设置
  7. Cesium 绘制点、线、面和测距
  8. NextCloud前端支持播放mov文件
  9. 【设计模式】桥接模式 Bridge Pattern
  10. python turtle 书写新年快乐