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