Завтра с утра попробую увеличить размер блока.
И настало утро...
1. Программа слегка модифицирована: увеличен размер выделяемого блока и два оператора вывода сделаны более (IMHO) удобочитаемыми.
...
#include <iostream>
#include <exception>
/* gcc 4.4.3. Target: x86_64-linux-gnu */
int main ()
{
const size_t Mb = 1048576;
const size_t size = 2048;
int *ptr[size];
const size_t num = 1048576*1024; // YuG
size_t Alloc = 0;
try
{
for (size_t i = 0; i < size; i++)
{
ptr[i]= new int[num];
for (size_t j = 0; j < num; j++)
ptr[i][j] = 0;
Alloc += num * sizeof(int);
std::cout << i+1 << " ptr: " << ptr[i] << " Alloc: " << (Alloc/Mb) <<" Mb" << std::endl; // YuG
}
}
catch (std::exception &e)
{
std::cout << "std::exception: " << e.what() << std::endl; // YuG
}
return 0;
}
2. Сведения о системе:
bash-3.2$ uname -a
Linux rhws5 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012
x86_64 x86_64 x86_64 GNU/Linux
bash-3.2$ free
total used free shared buffers cached
Mem:
16427236 139640 16287596 0 712 12020
-/+ buffers/cache: 126908 16300328
Swap: 8159224 113772 8045452
bash-3.2$
3. компиляция:
bash-3.2$ gmake
/opt/gcc-4.1.2/bin/g++ -g -DNO_PRAGMA_ONCE -DUNIX_PLATFORM=1 -DUNIX_ENV=1 -DDEBUG -D_REENTRANT -Wno-multichar -c test.cpp -o test.o
/opt/gcc-4.1.2/bin/g++ -o test test.o -D_REENTRANT -g
Я использовал наш стандартный makefile для примеров.
Напомню, что gcc у нас - 4.1.2.
4. Результат теста:
bash-3.2$ ./test
1 ptr: 0x2aba83894010 Alloc: 4096 Mb
2 ptr: 0x2abb83896010 Alloc: 8192 Mb
3 ptr: 0x2abc83897010 Alloc: 12288 Mb
4 ptr: 0x2abd83898010 Alloc: 16384 Mb
5 ptr: 0x2abe83899010 Alloc: 20480 Mb
std::exception: St9bad_allocbash-3.2$
- catch сработал правильно