首页 > 解决方案 > Windows 10/mingw-w64 编译器上 size_t 的最大大小

问题描述

我在 Windows 10(64 位安装)上使用 mingw-w64 编译器(gcc 8.1.0)。size_t我的期望是获得等于(2 ^ 64 - 1)的最大值。但我的程序总是返回SIZE_MAXas (2^32 - 1 only) 的值。可能是什么原因?如何在我的 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

标签: cmingw-w64size-t

解决方案


检查时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标志。


推荐阅读