你好,由于我的程序需要用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个字节,这样就可以确定释放内存的大小。
TI中文支持网


