写一个C/ c++程序来查找一台机器是32位还是64位
write a C/C++ program to find if a machine is 32 bit or 64 bit
我在网上搜索,找不到任何程序。
我发现以下链接的机器大小为64位或32位,在64位机器中处理文件,但在32位机器中开发。现在很明显sizeof(int*)不是正确的方法。因为它会根据编译所用机器的体系结构返回4/8。那么如何找到它呢?
条件:不使用任何系统/操作系统/库调用。
32位系统地址空间不能寻址超过4gb的内存。假设64位平台有这么多可用的空闲空间(有争议),您可以尝试在单个块中分配超过4 gig的空间。这在32位系统上肯定会失败。
这只是一个想法,我可能会被否决,但这只是一个建议:)
将程序编译为64位并尝试是否可以在目标机器上执行?
内联汇编呢?:)
这仅仅是基于CPUID指令读取的信息。不管用什么操作系统
#include <iostream>
bool is64Bit()
{
int ExtendedFeatureFlags;
asm ( "mov $0x80000001, %%eax; " // 0x80000001 gets Extended Feature Flags
"cpuid; " // Call CPUID instruction.
"mov %%edx, %0; " // Copy EDX into first output variable.
:"=r"(ExtendedFeatureFlags) // Output variable.
: // No input variables.
:"%eax","%ebx","%ecx","%edx" // Clobbered registers.
);
return ExtendedFeatureFlags & (1<<29);
// If the 29th bit is on, the processor supports 64bit
// extensions.
}
int main()
{
std::cout << "Is 64bit?: " << (is64Bit() ? "YES" : "NO") << std::endl;
return 0;
}
如何制作一个程序,创建一个简单的。cpp文件本身,并尝试编译它的两种方式?:)
如果您设法找到sizeof(int*)之外的任何不使用操作系统调用的方法,我会非常印象深刻。我想你可能已经有了他们想要的好答案:p
对于c++, 64位编译器上的64位机器上的int应该是64位,对于32位机器也是如此,因此sizeof(int*)应该可以工作
32位环境将int, long和指针设置为32位,并生成可在任何i386系统上运行的代码。
64位环境设置int为32位和long,指针为64位,并为AMD的x86-64架构生成代码。
可以使用
#include <stdio.h>
int main(){
long z; printf("Long int size is %i bytes long!n", sizeof(z)); return 0;
}
并在gcc中使用-m32和-m64编译。如果是64位平台,程序将运行并输出8,否则程序将死亡。
#include <stdio.h>
int main(void) {
printf("n The Processor in this machine is %lu Bit Machine", sizeof(void *));
return 0;
}
在POSIX投诉系统上使用uname系统调用如何:http://linux.die.net/man/2/uname所需的信息将在机器字段
相关文章:
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 另一台电脑上的Visual Studio C++项目无法生成
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 当我在支持 avx2 的机器上编译并在另一台仅支持 avx 的机器上运行二进制文件时会发生什么?
- 如何在另一台未安装 Visual Studio 的计算机中使用由 Visual Studio 生成的 dll
- 在另一台计算机中运行 GTKMM 代码时未定义的符号
- 如何从另一台Ubuntu机器中运行Ubuntu中的C 程序
- BST搜索函数在一台机器上返回true,在另一台机器中返回false
- OpenCl代码在一台机器上工作,但我在另一台机器中得到了CL_INVALID_KERNEL_ARGS
- 程序在一台机器上编译,但不在另一台机器上编译
- 相同的android cmake git项目在一台Ubuntu机器上编译良好,但在另一台Ubuntu计算机上编译不好,即
- 为什么安装vcredist_x86.exe不能修复 SideBySide 错误,当我在一台机器上开发 EXE 并在另一台机器上运行它时?
- 在一台有n个内核的机器中,确定要启动的线程数的最佳方法是什么?(C++)
- Windows 8.1如何检测一台机器是台式机还是平板电脑?
- 写一个C/ c++程序来查找一台机器是32位还是64位
- 从同一网络中的另一台机器的哈希表中获取wordID
- 如何在另一台机器上运行Visual Studio 2015中构建的C++应用程序
- 使用c++将非文本文件从一台机器发送到另一台机器
- 用c++代码在一台Linux机器上出现分段错误,而在另一台机器上没有