在TDA4 PSDK里有三种内存分配api,分别是c语言的malloc,c++的new以及psdk提供的appMemAlloc。其中malloc和new的内存来源是一样的,由xdc的xdc.runtime.Memory模块提供api,内存来源是DDR_XXXX_X。appMemAlloc由openvx提供api,内存来源是DDR_XXXX_X_LOCAL_HEAP。内存的布局请参考各个核目录下的linker_mem_map.cmd文件,这里不做展开。
本来想把所有内存分配api统一管理起来,但发现目前的框架并不支持,因为各自的api的源码都是独立的,没有一个统一的管理。并且似乎无法把内存来源都指向DDR_XXXX_X_LOCAL_HEAP段,因此放弃这个伟大的统一想法。
但xdc.runtime.Memory的默认heap大小只有768KB,像c++的new,内置内存管理的stl容器,以及c的malloc等都是使用该内存,用着用着就会内存不足,因此可以通过修改vision_apps/apps/basic_demos/app_tirtos/bios_cfg/bios_common.cfg配置文件的Memory.defaultHeapSize值来改变heap大小。下图将heap大小改为了8MB.以上修改在PSDK7.00上测试通过。