> 백엔드 개발 > C++ > 본문

`cpuid` 명령을 사용하여 Linux에서 CPU 정보에 액세스하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-31 11:56:02
원래의
983명이 탐색했습니다.

How to Access CPU Information in Linux Using the `cpuid` Instruction?

cpuid 명령어를 사용하여 Linux에서 CPU 정보에 액세스

이 질문에서 개발자는 다음을 사용하여 Linux 환경에서 CPU 정보에 액세스하려고 합니다. Windows API의 _cpuinfo() 함수와 유사한 메서드입니다. 제공된 코드는 어셈블리 지침(cpuid)을 활용하여 이 정보를 검색하려고 시도하지만 개발자는 수동 어셈블리가 필요하지 않기를 원합니다.

해결책은 다음과 같이 코드를 컴파일할 때 사용할 수 있는 cpuid.h 헤더 파일을 활용하는 것입니다. GCC. 이 헤더는 두 가지 함수를 선언합니다.

<code class="c">unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig);
int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);</code>
로그인 후 복사

__get_cpuid_max 함수는 cpuid 명령에 대해 지원되는 가장 높은 입력 값을 반환합니다. __ext를 기본 정보의 경우 0x0, 확장 정보의 경우 0x8000000으로 지정할 수 있습니다.

__get_cpuid 함수는 지정된 수준에 대한 CPU 정보를 검색하고 eax, ebx, ecx 및 edx 레지스터의 데이터를 반환합니다. 성공하면 0이 아닌 값을 반환하고, 요청한 수준이 지원되지 않으면 0을 반환합니다.

사용 예:

<code class="c">#include <stdio.h>
#include <cpuid.h>

int main() {
  unsigned int eax, ebx, ecx, edx;

  // Get maximum supported CPUID level
  unsigned int max_level = __get_cpuid_max(0x0, NULL);

  // Iterate over different CPUID levels
  for (unsigned int level = 0; level <= max_level; level++) {
    // Retrieve CPUID data for the current level
    __get_cpuid(level, &eax, &ebx, &ecx, &edx);

    printf("Level %u: EAX=%u, EBX=%u, ECX=%u, EDX=%u\n", level, eax, ebx, ecx, edx);
  }

  return 0;
}</code>
로그인 후 복사

위 내용은 `cpuid` 명령을 사용하여 Linux에서 CPU 정보에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿