, 768*SIZE_K // 768K
, SIZE_M // 1M
, 512*SIZE_M // 512M
, 640*SIZE_M // 640M
, 768*SIZE_M // 768M
, SIZE_G // 1G
, SIZE_G + 100*SIZE_M // 1.1G
, SIZE_G + 200*SIZE_M // 1.2G
, SIZE_G + 300*SIZE_M // 1.3G
, SIZE_G + 400*SIZE_M // 1.4G
, SIZE_G + 500*SIZE_M // 1.5G
, SIZE_G + 600*SIZE_M // 1.6G
, SIZE_G + 700*SIZE_M // 1.7G
, SIZE_G + 800*SIZE_M // 1.8G
, SIZE_G + 900*SIZE_M // 1.9G
};
printf("大内存申请测试\n");
bool res = true;
for (size_t i = 0, c = sizeof(sizes)/sizeof(sizes[0]); i != c && res; ++i)
{
size_t s = sizes[i];
printf(" 测试申请%s 内存\n", i2a(s));
res = false;
res = alloca_test(s) || res;
res = malloc_test(s) || res;
res = new_test(s) || res;
res = VirtualAlloc_test(s) || res;
if (s >= 1024*1024*512)
{
res = malloc_test2(s) || res;
res = VirtualAlloc_test2(s) || res;
}
}
return 0;
}
运行结果如下:
大内存申请测试
测试申请 1K 内存
√ 1 alloca(1024) 通过
√ 2 alloca(1024) 通过
√ malloc(1024) 通过
√ new char[1024] 成功
√ VirtualAlloc(NULL, 1024, ..) 成功
测试申请 128K 内存
√ 1 alloca(131072) 通过
√ 2 alloca(131072) 通过
√ malloc(131072) 通过
√ new char[131072] 成功
√ VirtualAlloc(NULL, 131072, ..) 成功
测试申请 256K 内存
√ 1 alloca(262144) 通过
√ 2 alloca(262144) 通过
√ malloc(262144) 通过
√ new char[262144] 成功
√ VirtualAlloc(NULL, 262144, ..) 成功
测试申请 512K 内存
√ 1 alloca(524288) 通过
× 2 alloca(524288) 失败,内存溢出
√ malloc(524288) 通过
√ VirtualAlloc(NULL, 524288, ..) 成功
测试申请 768K 内存
√ 1 alloca(786432) 通过
× 2 alloca(786432) 失败,内存溢出
√ malloc(786432) 通过
√ new char[786432] 成功
√ VirtualAlloc(NULL, 786432, ..) 成功
测试申请 1.000M 内存
× 1 alloca(1048576) 失败,内存溢出
√ malloc(1048576) 通过
√ new char[1048576] 成功
√ VirtualAlloc(NULL, 1048576, ..) 成功
测试申请 512.000M 内存
× 1 alloca(536870912) 失败,内存溢出
√ malloc(536870912) 通过
√ new char[536870912] 成功
√ VirtualAlloc(NULL, 536870912, ..) 成功
√ buf1 malloc(536870912) 通过
√ buf2 malloc(536870912) 通过
√ 1 VirtualAlloc(NULL, 536870912, ..) 成功
√ 2 VirtualAlloc(NULL, 536870912, ..) 成功
测试申请 640.000M 内存
× 1 alloca(671088640) 失败,内存溢出
√ malloc(671088640) 通过
√ new char[671088640] 成功
√ VirtualAlloc(NULL, 671088640, ..) 成功
√ buf1 malloc(671088640) 通过
√ buf2 malloc(671088640) 通过
√ 1 VirtualAlloc(NULL, 671088640, ..) 成功
√ 2 VirtualAlloc(NULL, 671088640, ..) 成功
测试申请 768.000M 内存
× 1 alloca(805306368) 失败,内存溢出
√ malloc(805306368) 通过
√ new char[805306368] 成功
√ VirtualAlloc(NULL, 805306368, ..) 成功
√ buf1 malloc(805306368) 通过
√ buf2 malloc(805306368) 通过
√ 1 VirtualAlloc(NULL, 805306368, ..) 成功
√ 2 VirtualAlloc(NULL, 805306368, ..) 成功
测试申请 1.000G 内存
× 1 alloca(1073741824) 失败,内存溢出
√ malloc(1073741824) 通过
√ new char[1073741824] 成功
√ VirtualAlloc(NULL, 1073741824, ..) 成功
√ buf1 malloc(1073741824) 通过
× buf2 malloc(1073741824) 失败
√ 1 VirtualAlloc(NULL, 1073741824, ..) 成功
× 2 VirtualAlloc(NULL, 1073741824, ..) 失败
测试申请 1.098G 内存
× 1 alloca(1178599424) 失败,内存溢出
√ malloc(1178599424) 通过
√ new char[1178599424] 成功
√ VirtualAlloc(NULL, 1178599424, ..) 成功
√ buf1 malloc(1178599424) 通过
× buf2 malloc(1178599424) 失败
√ 1 VirtualAlloc(NULL, 1178599424, ..) 成功
× 2 VirtualAlloc(NULL, 1178599424, ..) 失败
测试申请 1.195G 内存
× 1 alloca(1283457024