内存动态分配管理

 1 /**********************************************
 2 *                内存管理测试
 3 **********************************************/
 4 #include "includes.h"
 5 #define  TASK_STK_SIZE   512                //任务堆栈长度
 6
 7 /******任务堆栈*********/
 8 OS_STK   TaskStartStk[TASK_STK_SIZE];        //任务堆栈区
 9 OS_STK   Stk_Task_1[TASK_STK_SIZE];            //任务1堆栈区
10
11
12 /********全局变量*****************/
13 INT16S            key;                        //用于退出uCOS_II的键
14 INT8U            err;                        //错误代码
15 OS_MEM            *IntBuffer;                    //内存控制块指针
16 INT8U            IntPart[20][128];            //20块128字节
17 INT8U            *IntBlkPtr;                    //块指针
18 OS_MEM_DATA        MemInfor;                    //查询内存块信息
19
20
21 /*******任务声明************/
22 void MyTask(void * pdata);
23 void Task_1(void * pdata);            //任务1
24
25 /************************主函数*********************************************/
26 void  main (void)
27 {
28     OSInit();                                        //初始化uCOS_II
29
30     IntBuffer=OSMemCreate(IntPart,20,128,&err);        //创建动态内存分区
31
32     PC_DOSSaveReturn();                                //保存Dos环境
33     PC_VectSet(uCOS, OSCtxSw);                        //安装uCOS_II中断
34
35     OSTaskCreate(MyTask,0,&TaskStartStk[TASK_STK_SIZE - 1],0);                //使任务MyTask的优先级别为0
36     OSStart();                                        //启动uCOS_II的多任务管理
37 }
38
39
40 void  MyTask(void *pdata)
41 {
42 #if OS_CRITICAL_METHOD == 3
43     OS_CPU_SR  cpu_sr;
44 #endif
45
46     pdata = pdata;
47
48     OS_ENTER_CRITICAL();
49     PC_VectSet(0x08, OSTickISR);        //安装uCOS_II时钟中断向量
50     PC_SetTickRate(OS_TICKS_PER_SEC);    //设置uCOS_II时钟频率
51     OS_EXIT_CRITICAL();
52
53     OSStatInit();                        //初始化uCOS_II的统计任务
54
55     /********创建任务*************/
56     //任务1,优先级别2
57     OSTaskCreate(Task_1,(void *)0,&Stk_Task_1[TASK_STK_SIZE-1],2);
58
59     for (;;)
60     {
61         //如果按下Esc键则退出uCOS_II
62         if (PC_GetKey(&key) == TRUE)
63         {
64             if (key == 0x1B)
65             {
66                 PC_DOSReturn();
67             }
68         }
69
70         OSTimeDlyHMSM(0, 0, 1, 0);    //等待
71     }
72 }
73
74 //分配内存
75 void  Task_1(void *pdata)
76 {
77 #if OS_CRITICAL_METHOD == 3
78     OS_CPU_SR  cpu_sr;
79 #endif
80
81     pdata=pdata;
82     while(1)
83     {
84         //申请内存
85         IntBlkPtr=OSMemGet(IntBuffer,&err);        //发送内存请求
86         OSMemQuery(IntBuffer,&MemInfor);        //内存控制块指针
87         //输出头指针
88         printf("MemInfor.OSFreeList:%x\n",MemInfor.OSFreeList);
89         printf("MemInfor.OSNUsed:%d\n",MemInfor.OSNUsed);
90         printf("MemInfor.OSNBlks:%d\n",MemInfor.OSNBlks);
91         printf("MemInfor.OSBlkSize:%d\n",MemInfor.OSBlkSize);
92         printf("----------------------------------------\n");
93         OSTimeDlyHMSM(0,0,1,0);
94         //释放内存
95         OSMemPut(IntBuffer,IntBlkPtr);            //参数1:分区指针;参数2:内存块指针
96         OSTimeDlyHMSM(0,0,1,0);
97     }
98 }
 
时间: 2024-09-27 23:55:38

内存动态分配管理的相关文章

C语言中内存的管理

一  Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制,跟web开发的ajax有异曲同工之妙. 1.运行在某个线程上,共享线程的消息队列: 2.接收消息.调度消息,派发消息和处理消息: 3.实现消息的异步处理: Handler能够让你发送和处理消息,以及Runnable对象:每个Handler对象对应一个Thread和Thread的消息队列.当你创建一个Handler时,它就和Thread的消息队列绑定在一起,然后就可以传递消息和runnable对象到消息队列中,执行消息

内存自动管理

内存自动管理    20 内存模型    20 Jvm垃圾收集算法    22 标记-清除    22 标记-整理    22 复制算法    22 分代思想    23 Stop-The-World    23 java堆溢出:    24 方法区和运行时常量池溢出    27 本机直接内存溢出    29 垃圾收集器    30 引用计数器:    30 可达性分析算法    31 回收方法区    32 垃圾收集器    33 HotSpot垃圾回收器    33 l CMS Failur

Nginx 内存池管理

概述 Nginx 使用内存池对内存进行管理,内存管理的实现类似于前面文章介绍的<STL源码剖析--空间配置器>,把内存分配归结为大内存分配 和 小内存分配.若申请的内存大小比同页的内存池最大值 max 还大,则是大内存分配,否则为小内存分配. 大块内存的分配请求不会直接在内存池上分配内存来满足请求,而是直接向系统申请一块内存(就像直接使用 malloc 分配内存一样),然后将这块内存挂到内存池头部的 large 字段下. 小块内存分配,则是从已有的内存池数据区中分配出一部分内存. Nginx

linux 内存地址空间管理 mm_struct

http://blog.csdn.net/yusiguyuan/article/details/39520933 Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起.(所依据的代码是2.6.32.60) 无论是内核线程还是用户进程,对于内核来说,无非都是task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor),因为它记录了这个进程所有的context.其中有一个被称为'内存描述符'(mem

[整理]内存动态分配

1.不要直接调用mallocvoid *malloc(unsigned int num_bytes); malloc函数的工作机制malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节).接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上.调用free函数时,它将用户释放

Android 内存溢出管理与测试

今天发现正在做的项目,时不时的会报错:dalvikvm heap out of memory on a 7458832-byte allocation (堆分配的内存溢出) 为什么会内存溢出呢?我以前从未遇见这种情况.后来在网上查了查资料,还是挺多的. 怎么说呢?因为Android开发基本上是以java语言为基础,那么程序是在java虚拟机上运行的.而虚拟机不允许单个程序中的Bitmap占用超过8M的内存,从报错的日志可以看出:7458832-byte大约就是7M多的样子,基本吻合上述数据.在我

浅谈操作系统对内存的管理

转自http://www.cnblogs.com/CareySon/archive/2012/04/25/2470063.html 简介 内存是计算机中最重要的资源之一,通常情况下,物理内存无法容纳下所有的进程.虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理内存如何增长,都赶不上程序增长的速度,所以操作系统如何有效的管理内存便显得尤为重要.本文讲述操作系统对于内存的管理的过去和现在,以及一些页替换的算法的介绍. 对于进程的简单介绍 在开始之前,首先从操作系统的角

浅谈SQL Server 对于内存的管理

简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) 对于计算机来说,存储体系是分层级的.离CPU越近的地方速度愉快,但容量越小(如图1所示).比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘.但同时离CPU越远的存储系统都会比之前的存储系统大一个数量级.比如硬盘通常要比同时代的内存大一个数量级.

sqlServer对内存的管理

简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) 对于计算机来说,存储体系是分层级的.离CPU越近的地方速度愉快,但容量越小(如图1所示).比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘.但同时离CPU越远的存储系统都会比之前的存储系统大一个数量级.比如硬盘通常要比同时代的内存大一个数量级.