MicroBlaze:malloc函数动态分配内存溢出

首先说明一点,MicroBlaze C函数库支持标准的内存管理函数,如malloc(),calloc(), free(),这些标准的C函数库定义在  libc.a 中。动态内存分配从内存的程序的堆(heap)中提供。所以堆的大小会直接影响调用malloc内存分配的大小。而堆的大小(heap size)是不能在运行的时候增加,这样需要在程序编译的时候确定合适的堆的大小,在大小可以EDK下generate linker script的时候,或者直接修改*.ld文件,例如:

_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x1000;
_HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x1000;

如果调用malloc(int size)函数的时候出现,malloc函数返回NULL,这就说明内存分配失败,原因是:

申请的内存的大小可能超过了内存本身的大小

申请内存的大小超过了heap_size的大小

针对以上两个原因,可以这样做修改heap_size 和增加实际的物理内存。

这里要提醒一点:每次调用malloc,必须检查一下返回值,以保证实际内存分配的请求。

在实践中,本人通过malloc申请一块近乎3MB内存空间用于存储图像数据,但是因为堆设置得太小了,返回值一直为NULL,内存分配失败。

调用malloc代码
void *zalloc(unsigned long size)
{
void *ret = malloc(size);
if (ret) memset(ret, 0, size);
return ret;
}

MicroBlaze:malloc函数动态分配内存溢出_设计制作_EDA/IC设计
29
127
0
0

相关资讯

  1. 1、时隔五年,《太子妃升职记》要拍第二部?男主凉透,女主难翻红665
  2. 2、口碑飙到8.5分!上映还有两天票房破663万,这部大片要爆了1946
  3. 3、从“香港cult片之王”到“商业片圣手”,邱礼涛的执着与癫狂2075
  4. 4、六位蜘蛛侠亮相漫威宇宙秒彼得·帕克变成中年大叔533
  5. 5、3D动画《森林战士》海报曝光国内有望引进4130
  6. 6、《英雄本色》大哥狄龙出演《乡村爱情11》,网友:打破了次元壁4549
  7. 7、上世纪末的香港艳片女星,如今年过半百,谁还认得出她们757
  8. 8、张柏芝晒B超照迎接家庭新成员,网友追问:孩子的爸爸是谁?603
  9. 9、《天机富春山居图》佟大为精湛演技获导演盛赞3745
  10. 10、开心麻花跌下神坛?《日不落酒店》评分3分,沈腾救场也没用!2228
全部评论(0)
我也有话说
0
收藏
点赞
顶部