我在Windows 10(64位安装)上使用mingw-w64编译器(gcc 8.1.0)。我的期望是使size_t
的最大值等于(2 ^ 64-1)。但是我的程序始终将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
返回:
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
答案 0 :(得分:5)
在检查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
标志。