通过测试,发现VC把每次动态分配的内存的大小信息保存在了这块内存前面16字节偏移处:
int main(int argc, char* argv[])
{
double *a = new double[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)a - 16)) << endl;
int *b = new int[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)b - 16)) << endl;
short *c = new short[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)c - 16)) << endl;
char *d = new char[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)d - 16)) << endl;
bool *e = new bool[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)e - 16)) << endl;
{
double *a = new double[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)a - 16)) << endl;
int *b = new int[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)b - 16)) << endl;
short *c = new short[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)c - 16)) << endl;
char *d = new char[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)d - 16)) << endl;
bool *e = new bool[543];
cout << "size of array: " << dec << *((unsigned int*)((char*)e - 16)) << endl;
delete []a;
delete []b;
delete []c;
delete []d;
delete []e;
return 0;
}
delete []b;
delete []c;
delete []d;
delete []e;
return 0;
}