Если это так, задайте имя класса и сделайте его пустым классом, чтобы вы могли присвоить ему этот пустой класс и избежать неопределенной ошибки.
В Linux (с относительно новым ядром) вы можете получить эту информацию из / sys:
/sys/devices/system/cpu/cpu0/cache/
Этот каталог имеет подкаталог для каждого уровня кэша. Каждый из этих каталогов содержит следующие файлы:
coherency_line_size
level
number_of_sets
physical_line_partition
shared_cpu_list
shared_cpu_map
size
type
ways_of_associativity
Это дает вам больше информации о кэше, чем вы когда-либо надеялись узнать, включая размер строки кэша ( coherency_line_size
), а также то, какие процессоры совместно используют этот кэш , Это очень полезно, если вы выполняете многопоточное программирование с общими данными (вы получите лучшие результаты, если потоки, совместно использующие данные, также совместно используют кэш).
В x86 вы можете использовать инструкцию CPUID с функцией 2 для определения различных свойств кэша и TLB. Анализ выходных данных функции 2 несколько сложен, поэтому я отошлю вас к разделу 3.1.3 Идентификация процессора Intel и Инструкция CPUID (PDF).
Чтобы получить эти данные из C / В коде C ++ вам потребуется использовать встроенную сборку, встроенные функции компилятора или вызвать функцию внешней сборки для выполнения инструкции CPUID.
Вы также можете попытаться сделать это программно, измерив некоторое время. Очевидно, что он не всегда будет таким же точным, как cpuid и т.п., но он более переносим. ATLAS делает это на этапе настройки, вы можете посмотреть на него:
На платформе Windows:
из http://blogs.msdn.com/oldnewthing/archive/2009/12/08/9933836.aspx
GetLogicalProcessorInformation функция даст вам характеристики логических процессоров, используемых система. Вы можете пройтись по SYSTEM_LOGICAL_PROCESSOR_INFORMATION возвращается функцией, ищущей записи типа RelationCache. Каждый такая запись содержит ProcessorMask который сообщает вам, какой процессор (ы) запись применяется к, и в CACHE_DESCRIPTOR, он говорит вам, что описывается тип кеша и насколько велика строка кеша для этого cache.
В Linux посмотрите на sysconf(3).
sysconf (_SC_LEVEL1_DCACHE_LINESIZE)
Вы также можете получить его из командной строки, используя getconf:
$ getconf LEVEL1_DCACHE_LINESIZE
64