TI中文支持网
TI专业的中文技术问题搜集分享网站

OMAP-L137 malloc()函数分配内存问题

你好,由于我的程序需要用malloc函数分配一段很大的内存空间,所以把heap的大小改大了:-heap 0x1900000 ,

SDRAM:       o = 0xC0000000  l =0x4000000

.sysmem     >   SDRAM

运行程序后发现malloc函数分配的内存起始地址是0xC1900008,就是SDRAM的起始地址加上heap的大小,把heap的大小改成其他,发现malloc分配内存的起始地址也是满足上面那个关系,这是为什么?

Tony Tang:

我想是你前面的.stack段设的也是这么长吧。

我试了一下,不是你说的这样,只是在开始位置偏移了8个byte而已,这8个byte是用来记录与管理heap的,每分配一次都会在对应的开始位置与结束位置加入这8个byte。

wei lee1:

调用free的时候,就传了一个参数,即malloc申请的起始地址,没有给free()传malloc申请内存的长度作为参数,free()怎么知道释放多大的内存空间?

 

所以malloc申请内存的时候,会在用户可以使用的地址之前额外分配8个字节来存储用户申请的内存的长度,这样调用free()的时候,自动向前找8个字节,这样就可以确定释放内存的大小。

赞(0)
未经允许不得转载:TI中文支持网 » OMAP-L137 malloc()函数分配内存问题
分享到: 更多 (0)