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