c - Windows 10/mingw-w64 编译器上 size_t 的最大大小
问题描述
我在 Windows 10(64 位安装)上使用 mingw-w64 编译器(gcc 8.1.0)。size_t
我的期望是获得等于(2 ^ 64 - 1)的最大值。但我的程序总是返回SIZE_MAX
as (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
解决方案
检查时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
标志。
推荐阅读
- c# - 为什么我的内存分配方法会抛出 Stack Overflow?
- c# - 简单的聊天应用程序在尝试托管 C#.NET 时崩溃
- c - 以正确的方式从 Object Dump 中获取 Shellcode
- shopify - 以集合为目标 - 液体
- c++ - 将 unordered_map 与 Catch2 谓词一起使用时类型不匹配
- javascript - 固定菜单不起作用(菜单不“粘”)
- javascript - 预检响应在 axios 中没有 HTTP ok 状态
- angular - Angular 6选择默认值不起作用
- python - 了解 PyTorch 张量形状
- sql - 在 PostgreSQL 中过滤使用 SQL 保留关键字作为列名的列