snifer

[原创]基于Blackfin系列的数组vs.动态申请

0
阅读(3318)

今天在给Blackfin写一个驱动时,出了个小小问题,却发现了大大的惊喜,写出来跟大家一起交流!!!

 在嵌入式系统中动态内存申请存在比一般系统编程时更严格的要求,这是因为嵌入式系统的内存空间往往是十分有限的,不经意的内存泄露会很快导致系统的崩溃。

所以一定要保证你的mallocfree成对出现:

char * function(void)
{
 char *p;
 p = (char *)malloc();
 if(p==NULL)
  ;
  /* 一系列针对p的操作*/
 return p;
}
 
在某处调用function(),用完function中动态申请的内存后将其free,如下:
 
char *q = function();

free(q);
 
上述代码明显是不合理的,因为违反了mallocfree成对出现的原则,即"谁申请,就由谁释放"原则。不满足这个原则,会导致代码的耦合度增大,因为用户在调用function函数时需要知道其内部细节!
 
正确的做法是在调用处申请内存,并传入function
 
char *p=malloc();
if(p==NULL)
;
function(p);

free(p);
p=NULL;
 
 而函数function则接收参数p
 
void function(char *p)
{
 /* 一系列针对p的操作*/
}
因此 
原则:

(1)尽可能的选用数组(动态申请内存方式可以用较大数组替换),数组不能越界访问
(2)如果使用动态申请,则申请后一定要判断是否申请成功了,并且mallocfree应成对出现!
小小问题,大大文章