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);
}