Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

Тесты для компилятора

09.05.2009, 23:46. Показов 1800. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая задача:
Выполните какие-нибудь тесты,чтобы убедиться,что ваш компилятор создаёт эквивалентные коды для итераций по индексу и с указателем(тут говорится примерно о следующем:
C++
1
2
3
4
5
6
7
8
9
void function_using_index(char massive[])
{
      for (int i=0;massive[i]!=0;i++) use (massive[i]);
}
*******************************************************
void function_using_pointer(char massive[])
{
      for (char p*=massive;p!=0;p++) use (*p);
}
).Если у компилятора есть несколько уровней оптимизации,посмотрите,как это влияет на качество сгенерированного кода.
Какие тесты нужно/можно сделать,чтобы посмотреть на разницу?Я работаю в среде Code::Blocks,компилятор gcc версия 4.2.4.Опции оптимизации для компилятора нашёл,а где смотреть качество/скорость кода?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2009, 23:46
Ответы с готовыми решениями:

Ошибка компилятора fatal error C1091: ограничение компилятора: длина строки превышает 65535 байт
Компилируя программу вот такой командой: cl /O2 /Oi /GL /EHsc /MD /Gy main.cpp И компилятор выдает вот такую ошибку: ...

тесты(систем продуктов программ.)тесты?!?!
тесты,плиз кто умеет?!?! токо овтет кратко,например 2-а,и т.д. заранее благодарю и спс......

Выбор компилятора для 16 и 32
.386p ; разрешить привилегированные инструкции i386 ; СЕГМЕНТ КОДА (для Real Mode) ;...

6
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
08.06.2009, 21:23  [ТС]
Итак,кто нибудь может откликнуться на вопрос?Как проверить скорость работы разных версий кода?
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
08.06.2009, 21:43
Как вариант - дизассемблером разобрать экзешник и посмотреть ассемблерный код. (Эт если в асме разбираешься)
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
08.06.2009, 22:08  [ТС]
К сожалению,пока не разбираюсь.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
08.06.2009, 23:20
Цитата Сообщение от #pragma Посмотреть сообщение
Итак,кто нибудь может откликнуться на вопрос?Как проверить скорость работы разных версий кода?
Хм, ну вот например так (возможно, "крутить цикл" придется больше или меньше - зависит от требуемой точности....):
C++
1
2
3
4
5
6
7
8
9
const int NUM_LOOPS = 1000000;
.......
time_t start, finish;
time(&start);
for(int i = 0; i < NUM_LOOPS; ++i)
{
    // тут измеряемый кусок кода....
}
time(&finish);
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
08.06.2009, 23:34  [ТС]
Прикольный "хак" а что-то всем известное,стандартное,"нормальное",есть? Не с секундомером же бегать каждый раз ))
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 00:00
В исходном примере "for (char p*=massive;p!=0;p++) use (*p);" - ошибочный код, правильно было бы "for (char *p=massive;*p!=0;p++) use (*p);"

Чтобы проверить скорость работы - в посте #5 тебе расписали. Только вместо time надо использовать clock (почитай по нему документацию) - он мерит "чистое" время задачи (т.е. всякие системные задержки в это время включаться не будут)

"Стандартое" - написать программу в цикле и исполняемый файл запустить через утилиту time (если ничего не путаю) - она тебе покажет время исполнения. Но это будет время исполнения всей задачи, а не твоего фрагмента. Поэтому тебе нужно свой фрагмент исполнять в цикле большое количество раз. При этом нужно уметь писать код, чтобы в результате работы оптимизаций что-то не схлопнулось. Типа того, что если напишешь в цикле "a = 3 + 5", то у тебя не будет в цикле исполняться операция сложения, а будет просто иполняться присваивание "a = 8"

Поэтому качество кода следует оценивать глазами в ассемблерном файле:

C
1
2
3
4
5
6
7
8
extern void use (char);
void function_using_index(char massive[])
{
  int i;
  asm volatile ("------------");
  for (i=0;massive[i]!=0;i++) use (massive[i]);
  asm volatile ("------------");
}
Палки нарисовал для того, чтобы ввизуально проще было бы отличить "твой" код, от того кода, который компилятор должен построить в каждой процедуре

Для данного исходника без оптимизаций:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ gcc a.c -S -o a.s
$ cat a.s
...
    ------------
#NO_APP
    movl    $0, -4(%ebp)
    jmp .L2
.L3:
    movl    -4(%ebp), %eax
    addl    8(%ebp), %eax
    movzbl  (%eax), %eax
    movsbl  %al,%eax
    movl    %eax, (%esp)
    call    use
    addl    $1, -4(%ebp)
.L2:
    movl    -4(%ebp), %eax
    addl    8(%ebp), %eax
    movzbl  (%eax), %eax
    testb   %al, %al
    jne .L3
#APP
    ------------
...
Для данного исходника с оптимизациями:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ gcc -O2 a.c -S -o a.s
$ cat a.s
...
    ------------
#NO_APP
    movzbl  (%edx), %eax
    testb   %al, %al
    je  .L2
    movl    %edx, %ebx
    .p2align 4,,7
.L4:
    movsbl  %al,%eax
    movl    %eax, (%esp)
    call    use
    movzbl  1(%ebx), %eax
    addl    $1, %ebx
    testb   %al, %al
    jne .L4
.L2:
#APP
    ------------
...
Даже если не разбираешься в ассембелер, то глазками его можно посмотреть. В обоих случаях есть операция "jne", которая делает условный переход назад на метку (образуя при этом цикл). Посчитай хотя количество операций в цикле - это даст хотя бы приблизительную оценку качества кода
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2009, 00:00
Помогаю со студенческими работами здесь

Тесты с++ для новичков
Добрый день!Ситуация в следующем,учусь заочно и не на програмиста, дали задание,теории нет и лекций не было ((стараюсь разобраться сама,но...

Тесты для фабрик
Добрый день, помогите разобраться с тестами. Вот код: AgeFilter.cs using System; using System.Collections.Generic; using...

Автоматизированные тесты для three.js
Здравствуйте коллеги! Помогите, пожалуйста, советом или делом в организации автоматизированного тестирования приложения на базе three.js ...

Тесты для задачи
Бьюсь над решением одной задачи. Не прошу писать код, мне просто нужно подобрать пример на котором я валюсь...не могу разобраться что...

тесты для сисадминов
Здрасьте всем! подскажите плиз, где можно скачать тесты для системных администраторов для проверки знаний, при принятии на работу??? у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru