Значения адресов памяти, выводимые компилятором C ++ 14 на Mac Mini с 16 ГБ оперативной памяти (+1 ГБ виртуальной), показывают лишь незначительный диапазон 128 ТБ, даже если разница между стеком и кучей превышает 186 ГБ.
Я только что установил последний компилятор C ++ (чтобы обновить свои знания C ++) на моем Mac Mini с процессором Intel, 16 ГБ ОЗУ, 1 ТБ SSD.
#include <iostream>
int main () {
double value = 2.0;
double* pvalue = NULL; // Pointer initialized with null
pvalue = new double; // Request memory for the variable
*pvalue = 29494.99; // Store value at allocated address
std::cout << "Value of value : " << value << std::endl; // This is stored on stack
std::cout << "Address of value : " << &value << std::endl; // 0x7ffedfd08a30 (just below 128 TB)
std::cout << "Value at pvalue : " << *pvalue << std::endl; // This is stored on heap
std::cout << "Value of pvalue : " << pvalue << std::endl; // 0x7fd05f402830 (just below 128 TB)
// Even the difference is: 0x2E80906200 (over 186 GB)
delete pvalue; // free up the memory.
return 0;
}
/usr/local/bin/c++-9 heap.cpp -o heap
./heap
Мне было любопытно увидеть диапазоны памяти стека и кучи.
Я ожидал, что оба числа будут в пределах общего диапазона физической памяти моей системы: 16 ГБ ОЗУ, 1 ГБ виртуальной памяти, 1 ТБ SSD-памяти.
Однако результаты как для стека, так и для кучи показывают лишь 128 ТБ, и даже разница между ними составляет более 186 ГБ:
Value of value : 2
Address of value : 0x7ffee1776a30
Value at pvalue : 29495
Value of pvalue : 0x7fd05f402830
Я исследовал эту странность без хорошего результата.
Кто-нибудь может объяснить это, пожалуйста?