У меня есть 32 ГБ ОЗУ в моей системе и вы хотите читать и хранить файл объемом 15 ГБ в памяти. Когда я попытался выполнить следующий код, выход был: «n read = 1073741824», что соответствует точно 1 ГБ, тогда как он должен был читать байты, соответствующие размеру файла.malloc не выделяет указанную память (64 бит)
Я проверил даже запуск диспетчера системных ресурсов и увеличился ровно на 1 ГБ, а это значит, что malloc не выделил 17 ГБ пространства, как ожидалось.
С 64-разрядной системой я мог бы читать до 8 ТБ (с 32-разрядной системой - 2 ГБ или более конкретным 1,5 ГБ).
Я на 64-битной машине и ОС, и я уже сконфигурировал Visual C++ для сборки и выполнения 64-битных двоичных файлов, выполнив следующие шаги: Intel Link [Проверено, что это 64 бита, проверяя размер int-ранее это было 4 байта, теперь это 8 байт]
Что я могу настроить, чтобы выделить и использовать память размером более 1 ГБ?
#include <stdio.h>
#include <cstdlib>
#define PATH "C:\\train"
#define SIZE 17*1024*1024*1024
int main()
{
FILE * fp = fopen(PATH, "r");
char* buff = (char*)malloc(SIZE);
int nRead = fread(buff, 1, SIZE, fp);
buff[nRead] = 0;
printf("n read = %d\n", nRead);
int a;
scanf("%d" ,&a);
return 0;
}
'SIZE' является' 'int' и int' еще 4 байта на 64-битной Windows. Вы не можете поместить его в int. – Simple