Максимальный размер size_t в компиляторе Windows 10 / mingw-w64 - PullRequest
1 голос
/ 25 сентября 2019

Я использую компилятор mingw-w64 (gcc 8.1.0) в Windows 10 (64-битная установка).Я ожидаю, что максимальное значение size_t будет равно (2 ^ 64 - 1).Но мои программы всегда возвращают значение SIZE_MAX как (только 2 ^ 32 - 1).Что может быть причиной?Как я могу достичь максимального значения (2 ^ 64 - 1) в моих программах на C?

Я изучаю язык C и хотел проверить утверждение, сделанное в книге, о том, что на современных компьютерах максимальный размер составляетsize_t может быть (2 ^ 64 - 1).Часть кода, которую я попытался проверить, выглядит следующим образом:

#include <stdio.h>
#include <stdint.h>

int main(){
    printf("%d\n", sizeof(size_t));
    printf("%zu\n", SIZE_MAX); 
    return 0;
}

Вывод:

4
4294967295

Я использую только один флаг -std=c11 во время компиляции и gcc --version возвращает:

gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0

1 Ответ

4 голосов
/ 25 сентября 2019

При проверке gcc --version вы утверждаете, что yo get

gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0

Важной частью вывода является следующее: i686-posix-dwarf-rev0, точнее, i686 part.

Thisговорит нам, что GCC построен как 32-разрядное приложение (i686 - 32-разрядная система) и по умолчанию будет создавать 32-разрядные исполняемые файлы.

Чтобы создать 64-разрядный исполняемый файл, необходимо добавить-m64 флаг.

...