2019-06-15

2019-06-15  本文已影响0人  阿群1986

微软vs2012中malloc()的实现是在申请的内存前面加上4个字节放长度和其它的一些信息。
这样free的时候就只需要把指针传进去,往前找几个字节,获取相关信息,然后删掉对应的空间即可。

而GCC下虽然也是把malloc的相关信息放在前面,不过数据格式和vs的不一样。

可以试试

#include <stdio.h>
int main(){

int *newtarr = malloc(8);
printf("malloc(8)向左偏移2个int32: 0x%08X\n", newtarr[-2]);
printf("malloc(8)向左偏移2个int32: 0x%08X\n", newtarr[-2]);

realloc(newtarr, 4);

newtarr = malloc(2);
printf("malloc(2): 0x%08X\n", newtarr[-2]);
free(newtarr);

newtarr = malloc(4);
printf("malloc(4)结果: 0x%08X\n", newtarr[-2]);
free(newtarr);

newtarr = malloc(8);
printf("malloc(8)结果: 0x%08X\n", newtarr[-2]);
free(newtarr);

}
上一篇下一篇

猜你喜欢

热点阅读