Нахождение объема оперативной памяти с использованием C ++ - PullRequest
4 голосов
/ 23 октября 2010

Как узнать объем оперативной памяти и информацию о моей системе, такую ​​как тип процессора, скорость, объем доступной физической памяти. объем стека и кучи памяти в ОЗУ, количество запущенных процессов.

Также, как определить, есть ли способ определить, сколько времени потребуется компьютеру для выполнения инструкции, извлечения слова из памяти (с отсутствием кэша и без него), чтения последовательных слов с диска и поиска нового расположение на диске.


Редактировать: Я хочу сделать это в моей системе Linux с помощью компилятора g ++. Есть ли какие-либо функции для этого ..? Также скажите мне, если такие вещи возможны в системе Windows.

Я только что получил этот вопрос из любопытства, когда изучал некоторые вещи по управлению памятью на c ++. Пожалуйста, проведите меня через этот шаг за шагом, или, может быть, онлайн-уроки отлично подойдут. Благодарю.

Ответы [ 3 ]

4 голосов
/ 23 октября 2010

Для Windows - GetPhysicallyInstalledSystemMemory для установленной оперативной памяти, GetSystemInfo для процессоров, API статуса процесса для перечисления процессов. Использование кучи и стека может быть получено только локальным процессом для себя. Помните, что использование стека для каждого потока, и в Windows процесс может иметь несколько куч (используйте GetProcessHeaps для их перечисления). Использование памяти для каждого процесса во внешне видимом использовании можно извлечь для каждого процесса с помощью GetProcessMemoryInfo .

Мне не известны интерфейсы Win32 API для списка второго абзаца. Вероятно, придется сделать это на уровне драйвера устройства (режим ядра), я думаю, если это вообще возможно. Извлечение инструкции и выполнение зависит от процессора, размера кеша и самой инструкции (по сложности они не одинаковы). Скорость доступа к памяти будет зависеть от скорости оперативной памяти, процессора и материнской платы. Доступ к диску также полностью зависит от характеристик системы.

3 голосов
/ 23 октября 2010

В Linux и GCC вы можете использовать функцию sysconf, включенную с заголовком <unistd.h>.

Существуют различные аргументы, которые можно передать для получения информации об оборудовании.Например, чтобы получить объем физической оперативной памяти на вашем компьютере, вам нужно сделать:

sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE);

См. Справочную страницу для всех возможных использований.можно получить максимальный размер стека процесса, используя системный вызов getrlimit вместе с аргументом RLIMIT_STACK, включенным с помощью заголовка <sys/resource.h>.

Чтобы узнать, сколько процессов запущено на текущем компьютере, вы можете проверить каталог /proc.Каждый запущенный процесс представлен в этом каталоге как файл, названный своим идентификационным номером процесса.

0 голосов
/ 23 октября 2010

В Windows Vista и Windows 7 Средство оценки системы Windows может предоставить много информации. Предположительно, к нему можно получить программный доступ через WEI API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...