Я пытаюсь выяснить, сколько памяти я могу выделить, прежде чем выделение не удастся.
Этот простой код C ++ выделяет буфер (размером 1024 байта), назначает последние пять символов буфера, сообщает, а затем удаляет буфер. Затем он удваивает размер буфера и повторяется до тех пор, пока не выйдет из строя.
Если я чего-то не упускаю, код может выделить до 65 терабайт памяти, прежде чем он выйдет из строя на моем MacBook Pro. Это вообще возможно? Как он может выделить намного больше памяти, чем у меня на машине? Должно быть, я упускаю что-то простое.
int main(int argc, char *argv[])
{
long long size=1024;
long cnt=0;
while (true)
{
char *buffer = new char[size];
// Assume the alloc succeeded. We are looking for the failure after all.
// Try to write to the allocated memory, may fail
buffer[size-5] = 'T';
buffer[size-4] = 'e';
buffer[size-3] = 's';
buffer[size-2] = 't';
buffer[size-1] = '\0';
// report
if (cnt<10)
cout << "size[" << cnt << "]: " << (size/1024.) << "Kb ";
else if (cnt<20)
cout << "size[" << cnt << "]: " << (size/1024./1024.) << "Mb ";
else
cout << "size[" << cnt << "]: " << (size/1024./1024./1024.) << "Gi ";
cout << "addr: 0x" << (long)buffer << " ";
cout << "str: " << &buffer[size-5] << "\n";
// cleanup
delete [] buffer;
// double size and continue
size *= 2;
cnt++;
}
return 0;
}