Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313

Медленнее ли индексация массива, чем работа с указателем?

14.11.2016, 22:51. Показов 3229. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Преподаватель донимает меня, что я использую индексацию для работы с массивами, вместо того, чтобы использовать смещение и разъименовывание указателя на нулевой элемент.

Вопрос 1: Как проверить, что индексация действительно медленнее, чем работа с указателями? Ведь a[i] эквивалентно i[a] и эквивалентно *(a+i). Разве компилятор не способен проводить такие простые оптимизации по-умолчанию даже при уровне -O0?

Вопрос 2: Если предположение в вопросе 1 истинно, то как доказать ей этот факт и не гробить себе глаза этим обилием звёздочек?

Хочу ещё уточнить, что она не знала финта типа i[a] == *(i + a);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2016, 22:51
Ответы с готовыми решениями:

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической?
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

В чем разница между указателем и указателем на указатель?
int x, *p, *q; x=10; p=&x; q=p; cout<<*q; int x, *p, **q; x=10; p=&x; q=&p;

Работает медленнее, чем обычно
Всем привет! Написал приложение использующее OpenGL и WinAPI. Всё бы хорошо, если бы при тестах на других компьютерах (на Win 7 и XP)...

24
59 / 54 / 34
Регистрация: 18.04.2014
Сообщений: 122
15.11.2016, 01:02
Студворк — интернет-сервис помощи студентам
Lyosha12,
можно попробовать следующее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <ctime>
#include <iomanip>
 
using namespace std;
 
int main() {
    clock_t start, end;
 
    const long N(10000);
    int a[N] = {};
 
    int k = 0;
    while (k < 10) {
        cout << "Test " << k + 1 << ":\n";
        start = clock();
        for (long i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                a[j] = 0;
            }
        }
        end = clock();
 
        cout << fixed;
        cout << setprecision(6)
                << (end - start) / static_cast<double>(CLOCKS_PER_SEC) << endl;
 
        start = clock();
        for (long i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                *(a + j) = 0;
            }
        }
        end = clock();
        cout << setprecision(6)
                << (end - start) / static_cast<double>(CLOCKS_PER_SEC) << endl;
        ++k;
    }
 
    return 0;
}
У меня вывод такой
Кликните здесь для просмотра всего текста
Test 1:
0.235000
0.240000
Test 2:
0.222000
0.239000
Test 3:
0.220000
0.265000
Test 4:
0.219000
0.238000
Test 5:
0.219000
0.274000
Test 6:
0.218000
0.241000
Test 7:
0.219000
0.238000
Test 8:
0.219000
0.239000
Test 9:
0.218000
0.237000
Test 10:
0.217000
0.239000


По сабжу: на мой взгляд основная цель препода не чтобы ты замучился, а чтобы нотация с указателями не вызывала у тебя неудобств. Это поможет в понимании и использовании STL.
1
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.11.2016, 01:02
Цитата Сообщение от Lyosha12 Посмотреть сообщение
Тема для неё не авторитет.
Ну вот тебе прямо из стандарта, раздел 5.2.1:
expression E1[E2] is identical (by definition) to *((E1)+(E2))
2
Заблокирован
15.11.2016, 09:31
Цитата Сообщение от Lyosha12 Посмотреть сообщение
Но, когда я ищу информацию и предоставляю что нашёл конкретно преподу по C++, он считает, что всё, что я нашёл, есть бред. Не обоснованный.
Мммм, а почему ты ей доказываешь? Она предоставила какой-нибудь источник, откуда она взяла свои утверждения? Спроси у нее, где ты можешь об этом почитать, потому что ты ей не веришь и хочешь увидеть оригинатора этой прозы

Добавлено через 3 минуты
Цитата Сообщение от Mathist Посмотреть сообщение
на мой взгляд основная цель препода не чтобы ты замучился, а чтобы нотация с указателями не вызывала у тебя неудобств
Цель-то да, научить адресной арифметике, я тоже об этом уже думал. Просто ее нужно преподносить правильно, а не так, что так быстрее, а так медленнее, это в будущем может акунуться где-нибудь. Дело в том, что 10 лет назад, у нас так же говорили в учебном заведении. Видимо, это "указателями быстрее" передается из поколения в поколение. И не смотря на благую цель, мне кажется, неправильным дезинформировать людей.

Добавлено через 2 минуты
Lyosha12, преподаватель, опять же, может уже и на принцип пойти, что какой-то сопляк ее жизни учит. И так далее, и тому подобное. Она любым способом сможет заставить тебя писать через указатели, а еще оценку снизит за незнание, как работать с указателями. Оно тебе вообще надо?
1
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
15.11.2016, 15:43  [ТС]
Спасибо всем, недопонимание устранено.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.11.2016, 15:57
Цитата Сообщение от nimazzzy Посмотреть сообщение
Lyosha12, преподаватель, опять же, может уже и на принцип пойти, что какой-то сопляк ее жизни учит.
Ну не жизни а IT, а IT такая сфера которая так быстро развивается что некоторые вещи которые раньше были верными сейчас - нет.

Писать можно конечно по разному, но то что с указателями придется разобраться это факт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2016, 15:57

Интернет на Windows 7 работает медленнее, чем на XP.
Сейчас перешел с XP на Windows 7, но скорость загрузки упала почти в 3 раза. Сейчас стоит XP and Windows 7, на XP скорость идет заявленная,...

Компьютер работает медленнее чем обычно
Добрый день! С недавнего времени стал медленнее работать компьютер (медленнее открываются приложения, сворачиваюся\разворачиваются в...

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

Почему VB выполняется намного медленнее, чем VBA?
Сделал макрос на VBA в CoreDraw (перебирает объекты, проверяет их свойства итд). Попытался перенести его на VB6. Все работает, но раз в...

Многопоточная программа выполняется медленнее чем однопоточная
Программа должна создать один поток исполнения для каждого файла и использовать эти потоки для одновременного подсчета числа строк во всех...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru