2013-06-26 5 views
1

в x64, я могу получить не более 1.9G памяти malloc(), но моя физическая память - 8G, почему это происходит?Сколько памяти мы можем получить через malloc() в x64?

+2

Это 32-битный или 64-битный процесс? Кроме того, физическая память! = Виртуальная память – Patashu

+0

Проверьте свои настройки ссылок - используете ли вы 64-битный компилятор, компоновщик и т. Д.? – James

+5

Какая операционная система? ОС может налагать ограничения на размер каждого процесса. Чтобы узнать, компилируете ли вы в 32-битном или 64-битном режиме, проверьте размер указателя: 'printf ("% d \ n ", (int) sizeof (void *));' –

ответ

7

Это, скорее всего, происходит потому, что вы используете 32-разрядный компилятор, 32-разрядную ОС или (возможно) и то, и другое.

Я упростил свой код совсем немного, к этому:

#include <iostream> 
#include <stdlib.h> 

int main() { 
    void *block = malloc(1024LL * 1024LL * 1024LL * 6); 
    if (block) 
     std::cout << "Allocated 6 Gig block\n"; 
    else 
     std::cout << "Unable to allocate 6 Gig block.\n"; 
    return 0; 
} 

Если я компилирую это с 32-битным компилятором, он выходит из строя (печатает если я «Невозможен выделяемой 6 Gig блока.» скомпилируйте его с помощью 64-битного компилятора, он преуспеет (распечатывает «Allocated 6 Gig block»). У меня нет 32-битной ОС, способной ее протестировать, но я уверен, что с 32-разрядной ОС , он также потерпит неудачу (32-разрядный исполняемый файл будет действовать примерно так же, как в 64-битной ОС, а 64-разрядный исполняемый файл вообще не будет работать на 32-разрядной ОС).

Specs: 32-bit compilers tested: gcc 4.8.1 (MinGW), Microsoft VC++ 17. 
64-bit compiler: VC++ 17. 
OS: Windows 8 x64. 
+1

(Разумеется, битность компилятора не имеет значения, это битвость выхода компилятора, но +1, потому что это педантично ...) –

+0

@Billy Я бы сказал, что это вопрос интерпретации, а не педантизма. Когда я читаю «32-битный компилятор», я думаю «компилятор, который компилирует 32-битный код». Продавцы компилятора в моем опыте используют его так же. –

+0

@ Коди: Да ... это то, что я могу задуматься на MSVC++ land, которое поставляется с 32-битными и 64-битными компиляторами, нацеленными на 64-битные. –