Я написал код для памяти calloc до тех пор, пока не будет доступным.Различия Calloc между MS Windows и Linux?
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
int *p;
int count = 0;
while(1)
{
int inc=1024*1024*sizeof(char);
p=(int*) calloc(1,inc);
count++;
if(!p)
{
cout << "managed to allocate " << (count * 1024 * 1024)/1000000000.0 << " gb\n";
return 1;
}
}
}
Выполнение выше код на Windows, в Visual Studio, я получаю следующее:
managed to allocate 1.9881 gb
Press any key to continue . . .
Однако, когда я принесу его к моей системе Linux и компиляции и запуска со следующим:
g++ mem.cpp
./a.out
Процесс немного забивается os.
Кажется, что calloc не возвращает null, даже если выделенная память не существует?
Если это так, то как я могу изменить свой существующий код, чтобы добиться такого же эффекта в Linux, как и в Windows?
Почему вы используете 'calloc()' с C++ вообще, вместо использования функций [Dynamic memory management] (http://en.cppreference.com/w/cpp/memory) стандартной библиотеки? –
В C++ я бы рекомендовал использовать 'new' вместо' calloc', а затем попытался обработать ['bad_alloc'] (http://en.cppreference.com/w/cpp/memory/new/bad_alloc) – CoryKramer
@CoryKramer No , не 'новый' пожалуйста. Обратите внимание на то, что я связывал, пожалуйста. –