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

时间:2011-08-02 17:02:53

标签: c++

我在网上搜索过,无法获得任何节目 我找到了以下链接size of machine 64 or 32 bitprocessing files in 64 bit machine but developing in 32 bit machine 现在很清楚sizeof(int *)不是这样的。因为它将根据用于编译的机器的体系结构返回4/8。那么如何找到呢? 条件:不要使用任何系统/操作系统/库调用。
实际上这是在采访中提出的一个问题。

9 个答案:

答案 0 :(得分:6)

32位系统地址空间无法处理超过4GB的内存。假设64位平台有可用的免费(有争议),你可以尝试在一个块中分配4个以上的gig。这肯定会在32位系统上失败。

这只是一个想法,我可能会被投票到地狱和背部,但这只是一个建议:)

答案 1 :(得分:6)

将程序编译为64位并尝试是否可以在目标计算机上执行?

答案 2 :(得分:6)

内联汇编怎么样? :)

这完全基于使用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;
}

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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其他程序将死亡。

答案 7 :(得分:0)

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

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

  return 0;
}

答案 8 :(得分:-1)

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