Я пытаюсь понять, какКак работает getrusage и что действительно внутри структуры rusage?
int getrusage(int who, struct rusage* usage)
работы для того, чтобы рассчитать время одной моей программы.
Я краю страницу руководства, возможно, 10 раз, и все равно не могу ее получить. Пытался найти что-то в Интернете, но ничего, кроме справочной страницы об этой функции не найдено.
Что мне непонятно, так это то, что хранится внутри структуры rusage - страница руководства не очень ясна - поэтому я попытался запустить ее с помощью отладчика и посмотреть, что внутри, но все еще не понимаю, особенно, как два structs - timeval ru_utime и timeval ru_stime - работа.
Что внутри них предполагают разные значения, иногда 0, другие 2000 и т.д.
Я запускал простую программу с циклом for, который постоянно выделяет и освобождает память. Я использовал секундомер, чтобы посмотреть, сколько времени потребуется, это заняло 5,23 секунды. Но то, что я вижу в этих структурах, кажется, совершенно не связаны:
Перед цикла:
ru_utime = {tv_sec = 0, tv_usec = 1000}, ru_stime = {tv_sec = 0, tv_usec = 1000}
После цикла:
ru_utime = { tv_sec = 4, tv_usec = 677000}, ru_stime = {tv_sec = 0, tv_usec = 2000}
так, может кто-нибудь объяснить это мне или дать хорошую ссылку, где это объясняется?
Буду очень благодарен.
(Посмотрите, мой вопрос, чтобы лучше видеть, кажется, что комментарии не позволяют html-теги) Я запускал просто программу с циклом for, который выделяет и постоянно освобождает память. Я использовал секундомер, чтобы посмотреть, сколько времени потребуется, это заняло 5,23 секунды. Но то, что я вижу в этих структурах, кажется, совершенно не связаны:
Перед цикла:
ru_utime = {tv_sec = 0, tv_usec = 1000}, ru_stime = {tv_sec = 0, tv_usec = 1000}
после цикла
{tv_sec = 4 , tv_usec = 677000}, ru_stime = {tv_sec = 0, tv_usec = 2000} – Root149
Этот вид имеет смысл.Распределение памяти (через 'malloc') фактически выполняется в пользовательском пространстве, и оно запрашивает ядро больше, если у него заканчивается внутреннее пространство буфера, и, следовательно, только небольшое изменение в времени ядра. Это означает, что 4.6s в пользовательской земле (ish). Остальное, вероятно, связано с тем, что другие задачи выполняются во время тестирования; вы не получаете полный непрерывный доступ к CPU! – slugonamission
Итак, я должен учитывать только разницу между ru_utime до и после? ru_stime, похоже, не связано? – Root149