3、new、malloc、delete、delete[]、free
64位机器平台实验
该小节引用来源于C++ 中的创建和删除数组(new/delete 和 new[]/delete[]) 1
3.1、malloc
char *pValue = (char *)malloc(10);
free(pValue);
malloc实际分配内存比实际要多一个header,header里面包含了内存的大小等信息;
malloc返回的地址为实际data的地址,header存储在data之前;
free的时候会根据pValue 向前偏移到header进行释放内存;
3.2、new
3.2.1、new单个实例
CBase *pValue = new CBase;
delete pValue;
3.2.2、new一个数组
CBase *pValue = new CBase[3];
long *p = (long *)pValue;
printf("dataCnt:%ld, Cbase size:%ld\n", *(p-1), sizeof(CBase));
delete []pValue;
new一个自定义数据数组时,会在实际数据之前加入8byte(64位机器)存储当前数组的Cnt值,返回的地址是第一个实例的首地址;
delete[] 会根据这个sizeCnt来逐个调用析构函数,然后再释放实例内存;
可以看到上面3个实例的首地址刚好相差0x10(16字节)