我正在使用标记为x86_64-8.1.0-posix-seh-rt_v6-rev0. 运行时g++ --version,我看到:
g++.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这个版本的 g++ 应该默认生成 64 位二进制文件。
编译命令是这样的:
g++.exe -std=c++17 -g main.cpp -o main.exe
Run Code Online (Sandbox Code Playgroud)
但是,如果main.cpp看起来像这样:
#include <iostream>
int main() {
std::cout << sizeof(long);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它打印4而不是8. 我尝试使用-m64编译器标志,但没有任何改变。
我做错了什么,如何解决这个问题?
long在 64 位可执行文件中不保证大小为 64 位。事实上,在 Windows 上,long在 x86 和 x64 下总是 32 位。如果您需要 64 位整数,请使用long longor__int64或int64_t。如果您只想检查您的可执行文件是针对 32 位还是 64 位编译的,请sizeof(void*)改用。
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |