Windows 10/mingw-w64 编译器上 size_t 的最大大小
Maximum size of size_t on Windows 10/ mingw-w64 compiler
我在 Windows10(64 位安装)上使用 mingw-w64 编译器 (gcc 8.1.0)。我的期望是 size_t
的最大值等于 (2^64 - 1)。但是我的程序总是 return SIZE_MAX
的值作为(仅 2^32 - 1)。可能是什么原因?我怎样才能在我的 C 程序中达到 (2^64 - 1) 的最大值?
我正在学习 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
returns:
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
检查 gcc --version
时,您声明您得到
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
输出的重要部分是:i686-posix-dwarf-rev0
,更具体地说是 i686
部分。
这告诉我们 GCC 是作为 32 位应用程序构建的(i686 是 32 位系统),并且将默认创建 32 位可执行文件。
要构建 64 位可执行文件,您需要添加 -m64
标志。
我在 Windows10(64 位安装)上使用 mingw-w64 编译器 (gcc 8.1.0)。我的期望是 size_t
的最大值等于 (2^64 - 1)。但是我的程序总是 return SIZE_MAX
的值作为(仅 2^32 - 1)。可能是什么原因?我怎样才能在我的 C 程序中达到 (2^64 - 1) 的最大值?
我正在学习 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
returns:
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
检查 gcc --version
时,您声明您得到
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
输出的重要部分是:i686-posix-dwarf-rev0
,更具体地说是 i686
部分。
这告诉我们 GCC 是作为 32 位应用程序构建的(i686 是 32 位系统),并且将默认创建 32 位可执行文件。
要构建 64 位可执行文件,您需要添加 -m64
标志。