Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

Массив: Что быстрее: mass[n] или *(mass+n)? - C++

10.07.2012, 14:58. Просмотров 2098. Ответов 51
Метки нет (Все метки)

Что быстрее: mass[n] или *(mass+n) и стоит ли заморачиваться по этому поводу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 14:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив: Что быстрее: mass[n] или *(mass+n)? (C++):

динамичекий двумерный мас type *mass - C++
здрасти товарищи кодеры, нужны вашы знания в созданиях двумерного массива, но есть условие, создавать не как обычно type **mass ,а...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

Что быстрее массив или файл - C++
Привет! Я тут занялся обработкой содержимого текстовых файлов для этого пишу класс отслеживающий положение курсора в файле (типа номер...

Программа выдает ошибку при выводе структуры в функции Vyvod(int N, struct vehicle*mass) - C++
#include<iostream> #include<cstdio> #include<cstdlib> #include<fstream> #include <iomanip> using namespace std; struct...

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Что быстрее assembler или c++ - C++
Вопрос от новичка. Что будет быстрее по скорости выполнения и на сколько: 1) сложить a+b на C++ или на assembler 2) умножить a*b на C++...

51
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.07.2012, 21:17 #31
Toshkarik, Ну да, это-то понятно полагаю.
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
10.07.2012, 21:20 #32
Цитата Сообщение от ForEveR Посмотреть сообщение
массив ведь он и в африке массив, наши операторы вызваны не будут.
за счет перегрузки операторов они могут вызываться как угодно и с каким угодно смыслом

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct some
{
   int value;
   some& operator [](int) { return *this; }
   some& operator+(int)   { return *this; }
   some& operator*()      { for (;;) ; return *this; }
};
 
int main()
{
   some sm;
   *(sm + 5);
    sm[5];
}
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
10.07.2012, 21:22 #33
ForEveR, Ну я просто не понимаю обсуждения, массив на то и массив - его имя является константным указателем. При доступе по индексу разыменовывется указатель со смещением, и мы получаем объект ( не важно, встроенного типа или пользовательский класс ). И дальше уже применяем к нему доступные операции.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.07.2012, 21:23 #34
alex_x_x, Да, НО тут нет объявления массива.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
10.07.2012, 21:23 #35
alex_x_x, разговор идет про массивы объектов, а не про перегруженные операторы пользовательских классов.
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
10.07.2012, 21:26 #36
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Индексация разная - асм один и тотже. Резюме: Оба варианта индексации идентичны в плане быстродействия, т.к. идентичны асмы для какждого варинта индексации.
gcc(без оптимизации)
C++
1
2
3
4
5
6
7
8
int main()
{
    int a[5];
    int b[5];
 
    a[1] = 1;
    *(b + 1) = 1;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;---------------------
;    a[1] = 1;
;---------------------
 
; a[1] = 1;
movl    $0x1,-0x10(%ebp)
 
 
 
;---------------------
;    *(b + 1) = 1;
;---------------------
 
; временная перменная (b + 1)
lea     -0x28(%ebp), %eax 
add     $0x4, %eax             
 
; *(b + 1) = 1;
movl    $0x1, (%eax)
как я и сказал, всё зависит от компилятора и его настроек.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.07.2012, 21:29 #37
Цитата Сообщение от rangerx Посмотреть сообщение
gcc(без оптимизации)
А какая версия?
0
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,254
Записей в блоге: 28
10.07.2012, 21:34 #38
Цитата Сообщение от rangerx Посмотреть сообщение
как я и сказал, всё зависит от компилятора и его настроек
Варианты без оптимизация вообще не имеет смысла сравнивать, когда речь идёт о том, какая конструкция быстрее. Включи хотя бы уровень -O1 и будет всё одинаково. На любом вменяемом компиляторе
0
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
10.07.2012, 21:44 #39
Ребят ну вы так и не ответили,не ужели через указатель не быстрее ?
0
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,254
Записей в блоге: 28
10.07.2012, 21:47 #40
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Ребят ну вы так и не ответили,не ужели через указатель не быстрее ?
Ответили же, что разницы никакой
1
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
10.07.2012, 21:47 #41
Ребят ну вы так и не ответили,не ужели через указатель не быстрее ?
Нет не быстрее уже ответели давно.

По крайней мере если речь идет о массивах, а не о контейнерах.
1
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
10.07.2012, 21:57 #42
От блин,а я то надеюсь на то что указатели быстрее,всегда старался создать лишний указатель присвоить ему адрес первого элемента и инкеминтировать его

кто подскажет почему вылазиет ошибка вот в таком коде ?
C++
1
2
3
4
5
6
    int m[5] = {3,2,6,7,8};
    int *a = new int;
    *a = 0;
        for (int i =0 ; i < 5;++i,++a)
            m[*a]++;
    delete a;
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
10.07.2012, 21:58  [ТС] #43
xADMIRALx, *(++a)

Добавлено через 20 секунд
xADMIRALx, ты изменяешь адрес указателя. а надо значение
1
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,254
Записей в блоге: 28
10.07.2012, 22:24 #44
Цитата Сообщение от xADMIRALx Посмотреть сообщение
От блин,а я то надеюсь на то что указатели быстрее,всегда старался создать лишний указатель присвоить ему адрес первого элемента и инкеминтировать его
Чтобы ускорить программу на одну наносекунду?
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
10.07.2012, 22:34  [ТС] #45
Evg, нано ли?
0
10.07.2012, 22:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2012, 22:34
Привет! Вот еще темы с ответами:

Что быстрее списки или вектор ? - C++
Всем привет. Делаю приложение и очень важна скорость обработки данных, а нужно хранить динамические массивы. В каком формате будет...

If или switch().case. Что быстрее - C++
Есть два кода. Первый: if(a == 2) a += 2; if(a == 3) a+= 3; if(a == 4) a+=4; Второй:

Деление с остатком или маска, что быстрее? - C++
Всем известно, что побитовый сдвиг (&lt;&lt;, &gt;&gt;) выполняется быстрее деления на два. Деление целых на 2 через битовый сдвиг - архаизм? и...

Что быстрее - двоичный или текстовый файл? - C++
Встал вопрос о времени чтения данных с диска, посему нужно выбрать быстрейший из этих двух способов хранения данных на внешнем носителе. ...


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru