سؤال

هل من الممكن للكشف عن بنية النظام / معالج في حين أن البرنامج <م> هو تشغيل (تحت النوافذ وتحت لينكس) في ج ++؟

هل كانت مفيدة؟

المحلول

في ويندوز، يمكنك استخدام __cpuid . على لينكس، يمكنك open("/proc/cpuinfo") ونتطلع من خلال ذلك.

وهنا مثال على ويندوز، يقوم على سبيل المثال في يختلط <لأ href = "http://msdn.microsoft.com/en-us/library/hskdteyh٪28v=vs.100٪29.aspx" = "نوفولو noreferrer"> الصفحة MSDN :

#include <intrin.h>

bool cpuSupports64()
{
    int CPUInfo[4];
    __cpuid(CPUInfo, 0);
    return (CPUInfo[3] & 0x20000000) || false;
}

نصائح أخرى

وتحت لينكس، يمكنك استخدام استدعاء نظام 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 سوف تحدد الهندسة المعمارية.

واعتمادا على ما كنت تنوي القيام به مع هذه المعلومات (على سبيل المثال تحديد رمز التجميع أسرع handcoded عن وحدة المعالجة المركزية محددة)، لينكس قد ترغب في قراءة / إجراءات / cpuinfo، وتحديدا: قسم "الأعلام"، حتى تتمكن من الاختيار بين SSE تنفيذ / SSE2 مقابل تنفيذ MMX مقابل أيا كان.

ونظام endian كبيرة مقابل نظام endian قليلا قليلا أكثر تعقيدا، راجع: HTTP: // en.wikipedia.org/wiki/Endianess

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top