Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2009, 20:15   #1
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию Измерение времени выполнения цикла

Пробовал измерить работу цикла, в котором происходит заполнение массива(достаточно большого размера), после запуска проги возникает следующее сообщение: "An error has occured in your application. If you choose ignore, you should save your work in a new file. If you choose Close, your application will terminate."
после чего пишет: "K1 (название программы - авт.) caused a General Protection Fault in module K1.exe at 0001:0198."
в чём проблема? Может я неправильно время измеряю...
Вот код:
Код:
#include <time.h>
#include <stdio.h>
#include <conio.h>
int main(int argc, char* argv[])
{   
	int *arr ;
	arr=new int[262144] ;
	time_t t ;
        (void) time(&t) ;
	for (long i=0; i < 262144; ++i) {arr[i]=0 ;}
	printf ("vremya: %g sek.\n", difftime (time (NULL), t));
	delete [] arr ;
        getch() ;
	return 0;
}
Alexcomeback вне форума Ответить с цитированием
Старый 23.04.2009, 22:33   #2
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

сейчас закомпилировал борланд цпп биледром- все нормально, все работает..время правда 0 секунд=) ну хотел в секундах-столько же и получишь=)
radiohobbyt вне форума Ответить с цитированием
Старый 23.04.2009, 22:34   #3
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

а вообще смотри RDTSC(ассемблерная комманда- количество тактов процессора с момента его запуска) для измерения таких вещей
radiohobbyt вне форума Ответить с цитированием
Старый 23.04.2009, 23:12   #4
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию

работает значит... Странно...
Только вот почему 0 выдаёт, ведь по идее я же создал массив достаточной величины, чтобы время было близкое к секундным измерениям...

в любом случае, спасибо А с ассемблеровскими коммандами ещё плохо знаком(
Alexcomeback вне форума Ответить с цитированием
Старый 24.04.2009, 05:34   #5
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

У меня тоже все работает, но время тоже равно 0. На сколько я понимаю тип time_t - округляет время до 1 секунды. Т.к. в данном случаи время близко к 0, оно округляется до 0.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 24.04.2009, 07:15   #6
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

хм...и это- большой массив? увеличь его в тысячу раз..тогда и будет большой массив. а это всего лишь чтото чуть больше мегабайта.
radiohobbyt вне форума Ответить с цитированием
Старый 24.04.2009, 12:33   #7
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от radiohobbyt Посмотреть сообщение
а это всего лишь чтото чуть больше мегабайта.
Это ровно 1 мегабайт (при условии что тип int занимает 4 байта).
И зачем его увеличивать, если нужно именно столько?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 24.04.2009, 15:00   #8
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

итак...зачем увеличивать. difftime считает разницу в секундах(см хелп). для примера возьмем мой копм(слабенький ноут). частота процессора 1600000000 Герц. массив размером 262144 чисел типа инт он обработает за 0,00016384 секунды в идеальном случае. и где тут большой массив?

Последний раз редактировалось radiohobbyt; 24.04.2009 в 15:12.
radiohobbyt вне форума Ответить с цитированием
Старый 24.04.2009, 16:39   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Понятие "большой массив" растяжимое, но уж точно оно не зависит от того, сколько времени потратит ваш комп на его обработку. Мне, например, довольно редко приходилось использовать такие массивы (с размерностью более 200к), поэтому я бы сказал что он большой. Кто-то может каждый день пишет программы с подобными массивами, поэтому для него он вполне обычный.
По поводу difftime - я бы вообще не стал использовать эту функцию для подобной программы. Подробнее можно посмотреть тут http://linux.yaroslavl.ru/docs/prog/libc/libc-6.html
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 25.04.2009, 16:21   #10
Alexcomeback
Пользователь
 
Регистрация: 03.04.2009
Сообщений: 59
По умолчанию

Согласен, массив был слишком маленьким. Увеличил в 100 раз - стал выдавать секунду.
Вдогонку ещё вопрос - а как бы реализовать изменение длинны масива. Ну например, считать сперва для 100мб, потом с 500мб потом с 1000.. Я не могу придумать ничего разумнее, чем прописание разных блоков кода для массивов разной длинны. Но тогда код разрастётся до жутких размеров... Намекните как=)
Alexcomeback вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приостановка выполнения цикла ACE Valery Общие вопросы C/C++ 21 19.11.2011 12:40
Измерение времени нажатия клавиши клавиатуры buka_14 Помощь студентам 6 13.04.2009 13:18
Измерение времени в c# byte916 Помощь студентам 4 06.03.2009 21:18
оптимизация для меньшения времени выполнения Ganmaker Паскаль, Turbo Pascal, PascalABC.NET 3 19.11.2008 17:33
Приостановка цикла для выполнения внешней программы Uomo Общие вопросы Delphi 3 04.04.2008 11:48