繁体   English   中英

编写一个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;
}

如果你设法找到不使用操作系统调用的sizeof(int *)的任何方式,我会非常感动。 我认为你可能已经找到了他们想要的答案:p

使用C ++,64位机器上的64位编译器的int应该是64位,对于32位机器也是如此,因此sizeof(int *)应该可以工作

如何创建一个自己创建simple.cpp文件的程序并试图以两种方式编译它? :)

#include <stdio.h>
int main(void) {

  printf("\n The Processor in this machine is %lu Bit Machine", sizeof(void *));

  return 0;
}

32位环境设置int,long和指向32位的指针,并生成在任何i386系统上运行的代码。

64位环境将int设置为32位,长指针设置为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其他程序将死亡。

如何在POSIX投诉系统上使用uname系统调用: http//linux.die.net/man/2/uname所需信息将在机器字段中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM