您的位置:首页 > 其它

关于free如何知道要释放内存空间的长度问题(ARM篇)

2012-12-30 15:06 429 查看
X86的前提,不废话了,直接上测试代码主要部分~~~~

char *test_c1=(char *)malloc(Num);

*test_c1='h';          //'h'=0x68
*(test_c1+1)='o';     //'o'=0x6f
*(test_c1+2)='o';
*(test_c1+3)='o';

free(test_c1);
num=4



num=14



num=50



num=100



结果分析:

因为ARM Cortex-M3为32位的MCU,而且“堆栈指针的最低两位永远是0(硬件拉低),这意味着堆栈总是4字节对齐的”——ARM Cortex-M3权威指南P13,所以起码是0x04的整数倍~~~

所以按这样来说,4起码分配4,14起码分配4*4=16=0xf,50起码分配4*13=52=0x34,100起码分配4*25=100=0x64,但是结尾都以8结尾,这样会浪费一些字节,至于原因不得而知为啥子鸟~~~

ps:其实说是ARM篇有点不确切,应该是由MDK编译器来决定的~~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: