Zugriff auf CPU-Informationen unter Linux mithilfe der cpuid-Anweisung
In dieser Frage möchte ein Entwickler mithilfe von a auf CPU-Informationen in einer Linux-Umgebung zugreifen Methode ähnlich der Funktion _cpuinfo() in der Windows-API. Der bereitgestellte Code versucht, Assembleranweisungen (cpuid) zu verwenden, um diese Informationen abzurufen, aber der Entwickler möchte die Notwendigkeit einer manuellen Assemblierung vermeiden.
Die Lösung liegt in der Verwendung der Header-Datei cpuid.h, die beim Kompilieren von Code mit verfügbar ist GCC. Dieser Header deklariert zwei Funktionen:
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);
Die Funktion __get_cpuid_max gibt den höchsten unterstützten Eingabewert für die cpuid-Anweisung zurück. Sie können __ext entweder als 0x0 für grundlegende Informationen oder als 0x8000000 für erweiterte Informationen angeben.
Die Funktion __get_cpuid ruft CPU-Informationen für eine angegebene Ebene ab und gibt die Daten in den Registern eax, ebx, ecx und edx zurück. Bei Erfolg wird ein Wert ungleich Null zurückgegeben, und Null, wenn die angeforderte Ebene nicht unterstützt wird.
Verwendungsbeispiel:
#include
#include
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
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3