内存管理与局部指针

程序生命周期较短或者比较简单,可以不用考虑这些。不用看下去了。

 

局部指针在使用完毕之后要释放掉。(参数指针和返回指针 不在此论,因为外部还会有指向内存地址的指针。在函数内释放反而会出错)如果不释放掉指针所指向的内存地址会一直保持着被占用的状态。如果多了(一次性运行超长时间或者超多调用局部指针)会导致内存不足的报错--内存泄漏。所以使用局部指针的时候建议malloc() free() //   int *p    申请 p = (char *)malloc( 30 * sizeof(char) ); 指针使用~   释放free(description); 

局部指针指向内存地址的不确定性导致(间隔其他变量的申请地址),非一次性申请的内存空间不连续,被分割成各种小块。

使得应用程序不能申请到连续的大块内存而出错。所以需要内存管理。

申请一大块连续的内存空间。然后每次使用局部指针的时候都从这块空间里面申请,然后释放。不会影响到整体内存空间的连续性。

 内存管理可以自己做。做一个状态表,用赋值的方式一次性申请一大块连续内存。通过状态表来判断是否使用 而不是NULL

 

也可以用操作系统带的内存管理 例如ucos

INT8U Partiontion[100][32]   一个状态表 100块,每一块32字节

INT8U *P

 Partiontion = OSMemCreate(Partition, 100, 32, &err);  创建

P = OSMemGet(PartitionPtr, &err);  申请

 指针使用~

OSMemPut(PartitionPtr, P); 释放 

 

 

另外声明定义指针的时候。系统只分配了存储指针本身的内存,并未分配存储数据的内存

定义之后给他赋值一个已经存在的地址。而不能直接赋值。

int *p;

int a=5;

p=5;//错误的 不能直接赋值。    

p=&a;//正确,赋予了一个指向的地址。

或者 p=“字符串”;      因为在这里 双引号 做了3件事:  
 1.申请了空间(在常量区,永存!),存放了字符串 
 2. 在字符串尾加上了'/0'    
 3.返回地址    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章