写一个C/ c++程序来查找一台机器是32位还是64位

write a C/C++ program to find if a machine is 32 bit or 64 bit

本文关键字:机器 一台 64位 查找 32位 程序 一个 c++      更新时间:2023-10-16

我在网上搜索,找不到任何程序。
我发现以下链接的机器大小为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所需的信息将在机器字段

相关文章: