I am able to successfully run the code:
char* p = new char[34493878088];
cout << "Success at " << 34493878088 << " bytes" << endl;
delete[] p;
which as I understand allocates a 34 gigabyte char array. However, my computer only has 16 gigabytes of ram and my pagefile is only 3 gigabytes so how is this possible?
The reserved address space ("virtual memory") is not mapped immediately into the physical memory. This is delayed till the memory is accessed.
When you first time access the memory location, a page fault interrupt initially happens, and only then the kernel configures the memory controller (that is a piece of hardware, part of CPU) to place a page of physical memory for your program at that address location. The program is then resumed from where it was interrupted and does not see these things happening.
A region in address space that is formally reserved but never accessed does not use the actual physical memory and can be larger than the amount of the physical memory available.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With