Я работаю над заказом данных Peano-Hilbert (C++ 4.9, linux 64x), чтобы объединить динамически выделенную память. Для управления я пытаюсь визуализировать фактическое распределение данных в памяти. Для этого я конвертирую указатели на свои данные в целые числа, например:Значение указателя превышает доступную память? Как?
unsigned long int address = *(unsigned long int*)(&pointer);
а затем начертить их как некоторые 2D-карты. Он отлично работает для большинства случаев, но иногда я получаю значения, превышающие доступную память, например. 140170747903888, что соответствует сдвигу ~ 127 ТБ, тогда как у меня всего 16 ГБ ОЗУ. Какого черта?
Если вы строите с '' '-m64'''', то' '' sizeof (void *) == 8''' и '' 'sizeof (long int) == 4'''. Используйте '' 'long long int'''. – onqtam
@onqtam 'long int' * может * быть только четыре байта, это также может быть восемь байтов. Это зависит от компилятора. С GCC на Linux 'long int' обычно составляет восемь байтов. –
Это [виртуальная память] (https://en.wikipedia.org/wiki/Virtual_memory). –