如何以编程方式获得CPUcaching页面大小在C + +?

我想让我的程序读取它在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上

http://linux.die.net/man/2/getpagesize

在Win32上, GetLogicalProcessorInformation将返回一个包含CACHE_DESCRIPTORSYSTEM_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