您的位置 首页 国产IC

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

MicroBlaze:malloc 函数动态分配内存溢出-首先说明一点,MicroBlaze C函数库支持标准的内存管理函数,如malloc(),calloc(), free(),这些标准的C函数库定

首要阐明一点,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;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/179563.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部