是否可以在程序在 c++中运行(在 windows 和 linux 下)时检测系统/处理器架构?
7770 次
4 回答
3
在 Linux 下,可以使用uname
系统调用。它填充了这个用户分配的结构:
struct utsname { char sysname[]; /* Operating system name (e.g., "Linux") */ char nodename[]; /* Name within "some implementation-defined network" */ char release[]; /* OS release (e.g., "2.6.28") */ char version[]; /* OS version */ char machine[]; /* Hardware identifier */ #ifdef _GNU_SOURCE char domainname[]; /* NIS or YP domain name */ #endif };
该machine
字段将识别架构。
于 2009-10-28T13:59:00.540 回答
0
根据您打算如何处理此信息(例如,为特定 CPU 选择最快的手工编码汇编代码),在 Linux 下您可能需要阅读 /proc/cpuinfo,特别是:“标志”部分,因此您可以在 SSE 之间进行选择/SSE2 实现与 MMX 实现与其他。
Big endian system vs little endian system稍微复杂一些,参考:http ://en.wikipedia.org/wiki/Endianess
于 2009-10-28T12:48:28.607 回答
0
您还可以使用处理器宏来检测 c++ 代码中的系统架构,例如:
#include <iostream>
int main()
{
#ifdef __x86_64__
std::cout << "x86" << std::endl;
#endif
#ifdef __arm__
std::cout << "arm" << std::endl;
#endif
}
这是预定义编译器宏的参考列表。
编辑:处理器宏与编译器无关,不同的编译器有不同的处理器宏,因此无法以这种方式检测系统架构。
于 2021-03-12T02:39:32.297 回答