Как я могу найти время выполнения раздела моей программы в C?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

16
задан ergosys 23 October 2010 в 00:23
поделиться

9 ответов

Вы упомянули clock() и time() - Вы искали gettimeofday()? Это заполнит struct timeval, который содержит секунды и микросекунды.

, Конечно, фактическое разрешение до аппаратных средств.

15
ответ дан 30 November 2019 в 15:56
поделиться

Если это имеет значение вот тот, который это - только некоторые макросы:

#include <time.h>
clock_t startm, stopm;
#define START if ( (startm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define STOP if ( (stopm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define PRINTTIME printf( "%6.3f seconds used by the processor.", ((double)stopm-startm)/CLOCKS_PER_SEC);

Тогда просто использование это с:

main() {
  START;
  // Do stuff you want to time
  STOP;
  PRINTTIME;
}

От http://ctips.pbwiki.com/Timer

12
ответ дан 30 November 2019 в 15:56
поделиться

Вы хотите профилировщик приложение.

Поисковые ключевые слова в ТАК и поисковые системы: Linux, представляющий

11
ответ дан 30 November 2019 в 15:56
поделиться

Взгляните на gettimeofday, clock_ * , или get/setitimer.

3
ответ дан 30 November 2019 в 15:56
поделиться

Попробуйте "bench.h"; это позволяет Вам поместить START_TIMER; и STOP_TIMER ("имя"); в Ваш код, позволяя Вам произвольно сравнить любого раздела кода (примечание: только рекомендуемый для коротких разделов, не вещей, берущих десятки миллисекунд или больше). С точностью до такта, хотя в некоторых редких случаях это может измениться, как промежуточный код компилируется, в этом случае Вы более обеспечены с профилировщиком (хотя профилировщики обычно являются большим усилием использовать для определенных разделов кода).

Это только работает над x86.

2
ответ дан 30 November 2019 в 15:56
поделиться

Вы могли бы хотеть погуглить для инструментарий инструмент.

1
ответ дан 30 November 2019 в 15:56
поделиться

Вы не найдете вызов библиотеки, который позволяет Вам закончить разрешение часов своей платформы. Любое использование профилировщик (человек gprof) как другой плакат, предложенный, или - быстрый & грязный - помещает цикл вокруг незаконного раздела кода для выполнения его много раз, и часы использования ().

1
ответ дан 30 November 2019 в 15:56
поделиться

Если Вы разрабатываете на x86 или x64, почему бы не использовать Счетчик Метки времени: RDTSC.

Это будет более надежно затем Ansi C функции как время () или часы (), поскольку RDTSC является атомарной функцией. Используя функции C с этой целью может представить проблемы, поскольку у Вас нет гарантии, что поток, в котором они выполняются, не будет выключен, и в результате значение, которое они возвращают, не будет детальным описанием фактического времени выполнения, которое Вы пытаетесь измерить.

С RDTSC можно лучше измерить это. Необходимо будет преобразовать количество галочки назад в человекочитаемое время формат H:M:S, который будет зависеть от тактовой частоты процессоров, но Google вокруг и я уверен, что Вы найдете примеры.

однако даже с RDTSC Вы будете включать время, Ваш код был переключен из выполнения, в то время как лучшее решение, чем использование времени () / часы (), при необходимости в точном измерении, необходимо будет обратиться к профилировщику, который оснастит код и примет во внимание, когда код на самом деле не выполнится из-за контекстных переключений или что бы то ни было.

0
ответ дан 30 November 2019 в 15:56
поделиться

Это зависит от условий .. Профилировщики хороши для общих глобальных представлений, однако, если вам действительно нужно точное представление, я рекомендую KISS. Просто запустите код в цикле, чтобы его выполнение заняло около минуты. Затем вычислите простое среднее значение на основе общего времени выполнения и выполненных итераций.

Этот подход позволяет:

  1. Получать точные результаты с помощью таймеров с низким разрешением.

  2. Не сталкиваться с проблемами, когда приборы мешают работе высокоскоростных кэшей (l2, l1, ветвь… и т. Д.) Рядом с процессором. Однако выполнение того же кода в жестком цикле также может обеспечить оптимистичные результаты, которые могут не отражать реальных условий.

0
ответ дан 30 November 2019 в 15:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: