Предположим, у меня есть массив размером 78719476736 байт. Имейте в виду, что этот массив динамически выделяется с помощью malloc в моем коде C. Предположим, что malloc возвращает действительный указатель после выделения такого большого объема памяти. Размер этого массива больше, чем UINT_MAX(4294967295) , т.е. максимальный предел беззнакового целого числа (32 бита)
Предположим, мой код выглядит как-то ниже, например.
int *buf;
buf = (int*)malloc(78719476736);
Здесь 78719476736 больше, чем 4 * UINT_MAX.
Теперь, если мне нужно обратиться ко всем элементам buf, то, поскольку buf имеет тип int*, он будет 32-битным, поэтому он не сможет адресовать все элементы памяти, которые я выделил с помощью malloc (78719476736 байт).
Мой вопрос заключается в том, не следует ли изменить приведенный выше код, чтобы сделать buf такой длинной (64-битная переменная), поскольку только длинная длинная переменная сможет адресовать большую память, которую я выделил.
Измененный код, например.
unsigned long long int buf;
buf = (unsigned long long int*)malloc(78719476736);
На самом деле я думаю, что переменная buf больше не должна быть указателем, поскольку любой указатель будет иметь ширину 32 бита и, следовательно, он не сможет получить доступ к 78719476736 байтам.
Таким образом, это должен быть простой unsigned long long int, и мне придется привести значение указателя возврата malloc к unsigned long long int, как показано в измененном коде выше, и использовать buf для доступа ко всем выделенным элементам.
Я прав в своих предположениях выше?
or
Я что-то путаю/упускаю?
РЕДАКТИРОВАТЬ: Если это поможет,
Я работаю над рабочим столом с WinXP на Intel Core 2 Duo (64-разрядный процессор). Таким образом, с точки зрения процессора не должно быть проблем с доступом к адресному пространству более 4 ГБ. Какие все остальные компоненты должны быть включены для поддержки 64 бит, т.е.
а.) Как включить поддержку компилятором 64-разрядных систем при компиляции (я использую Visual Studio 2005 Professional edition)
б.) Поддержка ОС для 64-битной версии — я использую Windows XP Professional.
Спасибо.
-AD.