首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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,内存分配失败。


参考文献:
OS and Libraries Document Collection, oslib_rm.pdf
http://www.xilinx.com/support/documentation/sw_manuals/edk10_oslib_rm.pdf
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表