How to determine the hardware (CPU and RAM) on a machine?

前端 未结 13 1026
长发绾君心
长发绾君心 2020-12-31 03:29

I\'m working on a cross platform profiling suite, and would like to add information about the machine\'s CPU (architecture/clock speed/cores) and RAM(total) to the report of

13条回答
  •  耶瑟儿~
    2020-12-31 03:42

    Here is one method for getting the information you want on a Windows machine. I copied and pasted it from an actual project with some minor modifications, so feel free to clean it up to make more sense.

            int CPUInfo[4] = {-1};
            unsigned   nExIds, i =  0;
            char CPUBrandString[0x40];
            // Get the information associated with each extended ID.
            __cpuid(CPUInfo, 0x80000000);
            nExIds = CPUInfo[0];
            for (i=0x80000000; i<=nExIds; ++i)
            {
                __cpuid(CPUInfo, i);
                // Interpret CPU brand string
                if  (i == 0x80000002)
                    memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo));
                else if  (i == 0x80000003)
                    memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
                else if  (i == 0x80000004)
                    memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
            }
            //string includes manufacturer, model and clockspeed
            cout << "CPU Type: " << CPUBrandString << endl;
    
    
            SYSTEM_INFO sysInfo;
            GetSystemInfo(&sysInfo);
            cout << "Number of Cores: " << sysInfo.dwNumberOfProcessors << endl;
    
            MEMORYSTATUSEX statex;
            statex.dwLength = sizeof (statex);
            GlobalMemoryStatusEx(&statex);
            cout << "Total System Memory: " << (statex.ullTotalPhys/1024)/1024 << "MB" << endl;
    

    For more information, see GetSystemInfo, GlobalMemoryStatusEx and __cpuid. Although I didn't include it, you can also determine if the OS is 32 or 64 bit via the GetSystemInfo function.

提交回复
热议问题