我想让我的程序读取它在C ++中运行的CPU的高速caching行大小。
我知道这不是可移植的,所以我需要Linux的解决scheme和Windows的解决scheme(其他系统的解决scheme可能是有用的,所以如果你知道他们发布它们)。
对于Linux,我可以读取/ proc / cpuinfo的内容,并parsing开始的行与cache_alignment。 也许有一个更好的方式涉及一个API的调用。
对于Windows我根本不知道。
在Windows上
#include <Windows.h> #include <iostream> using std::cout; using std::endl; int main() { SYSTEM_INFO systemInfo; GetSystemInfo(&systemInfo); cout << "Page Size Is: " << systemInfo.dwPageSize; getchar(); }
在Linux上
在Win32上, GetLogicalProcessorInformation
将返回一个包含CACHE_DESCRIPTOR
的SYSTEM_LOGICAL_PROCESSOR_INFORMATION
,其中包含CACHE_DESCRIPTOR
的信息。
在Linux上,请尝试proccpuinfo库 ,这是一个独立于体系结构的C API,用于读取/ proc / cpuinfo
对于x86, CPUID指令。 快速谷歌搜索揭示了一些库的Win32和C + +。 我也通过内联汇编器使用了CPUID。
一些更多信息:
看起来像至少SCO Unix( http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html )具有_SC_CACHE_LINE sysconf。 也许其他平台有类似的东西?
我认为你需要从ntdll.dll
NtQuerySystemInformation
。