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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
10.07.2012, 14:58     Массив: Что быстрее: mass[n] или *(mass+n)? #1
Что быстрее: mass[n] или *(mass+n) и стоит ли заморачиваться по этому поводу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
10.07.2012, 21:00     Массив: Что быстрее: mass[n] или *(mass+n)?
  #21

Не по теме:

PS:Avazart, а если писать на С++ или паскале где быстрей будет доступ, аесли в шарпе. а где быстрей вообще работает индексации на NT или UNIX, давай глобализируем задачу и уйдём в дебри Не заморачивай голову...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
10.07.2012, 21:03     Массив: Что быстрее: mass[n] или *(mass+n)? #22
Цитата Сообщение от Avazart Посмотреть сообщение
а если использовать пользователький тип?
Если ты имеешь в виду самодельную реализацию операторов, то программист всегда же может всё сделать через ж...у и оно будет заведомо не одинаковым

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Оба варианта индексации идентичны в плане быстродействия, т.к. идентичны асмы для какждого варинта индексации
"Т.к. идентичны асмы" - это следствие. А причина - "т.к. это следует из стандарта языка Си\Си++ и определения оператора []" (разумеется, без учёта возможной кривой перегрузки)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2012, 21:03     Массив: Что быстрее: mass[n] или *(mass+n)? #23
alex_x_x, Ну, допустим, перегрузили, т.е.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct some
{
   int value;
};
 
some operator +(const some&, int)
{
    return some();
}
 
int main()
{
   some array[5];
   (*(array + 1)).value = 0;
}
массив ведь он и в африке массив, наши операторы вызваны не будут.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
10.07.2012, 21:04     Массив: Что быстрее: mass[n] или *(mass+n)? #24
Цитата Сообщение от ForEveR Посмотреть сообщение
массив ведь он и в африке массив, наши операторы вызваны не будут
А оператор можно перегрузить только для класса, ноне для указателя на класс?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2012, 21:06     Массив: Что быстрее: mass[n] или *(mass+n)? #25
Evg, Один параметр точно должен быть объектом класса (значением, ссылкой), но не указателем.
http://liveworkspace.org/code/513c85...b1d55c72126db3
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2012, 21:07     Массив: Что быстрее: mass[n] или *(mass+n)? #26
Цитата Сообщение от ForEveR Посмотреть сообщение
Не соглашусь. Если нету проверки на индекс, если итераторы реализованы через указатель, если включены оптимизации - скорость будет одинаковой.
- возможно я несколько некорректно выразился, т.е. если имеем класс
C++
1
2
3
4
5
6
7
8
9
class userType
{
private:
    char *str;
public:
    userType(char * _str){_str = str;}
    char Get(int index){return str[index];}
    char * Mem(){return str;};
};
То да скорость индексации будет одинаковой, но т.к. в реалии классы мы пишем сложнее а перегрузить оператор [] тоже надо то думаю код асма для самописного контейнера выйдет всё же подлинней. В любом случае для простых массивом скорости доступа одинаковы, как я уже писал.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
10.07.2012, 21:10     Массив: Что быстрее: mass[n] или *(mass+n)? #27
Цитата Сообщение от ForEveR Посмотреть сообщение
Evg, Один параметр точно должен быть объектом класса (значением, ссылкой), но не указателем
В итоге получается, что при работе с массивом мы никогда не попадём ни в перегруженный оператор +, ни в перегруженный оператор []?
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
10.07.2012, 21:11     Массив: Что быстрее: mass[n] или *(mass+n)? #28
Ребят а через указатель доступ будит быстрее ?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2012, 21:12     Массив: Что быстрее: mass[n] или *(mass+n)? #29
Evg, С нативным массивом - да. Если класс контейнер, он уже не является массивом.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
10.07.2012, 21:15     Массив: Что быстрее: mass[n] или *(mass+n)? #30
Перегруженный оператор для объекта массива можно будет вызвать так:
some_class array[ 6 ];

array[ 6 ][ 0 ] = 1;
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2012, 21:17     Массив: Что быстрее: mass[n] или *(mass+n)? #31
Toshkarik, Ну да, это-то понятно полагаю.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
10.07.2012, 21:20     Массив: Что быстрее: mass[n] или *(mass+n)? #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];
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
10.07.2012, 21:22     Массив: Что быстрее: mass[n] или *(mass+n)? #33
ForEveR, Ну я просто не понимаю обсуждения, массив на то и массив - его имя является константным указателем. При доступе по индексу разыменовывется указатель со смещением, и мы получаем объект ( не важно, встроенного типа или пользовательский класс ). И дальше уже применяем к нему доступные операции.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
10.07.2012, 21:23     Массив: Что быстрее: mass[n] или *(mass+n)? #34
alex_x_x, Да, НО тут нет объявления массива.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
10.07.2012, 21:23     Массив: Что быстрее: mass[n] или *(mass+n)? #35
alex_x_x, разговор идет про массивы объектов, а не про перегруженные операторы пользовательских классов.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
10.07.2012, 21:26     Массив: Что быстрее: mass[n] или *(mass+n)? #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)
как я и сказал, всё зависит от компилятора и его настроек.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.07.2012, 21:29     Массив: Что быстрее: mass[n] или *(mass+n)? #37
Цитата Сообщение от rangerx Посмотреть сообщение
gcc(без оптимизации)
А какая версия?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
10.07.2012, 21:34     Массив: Что быстрее: mass[n] или *(mass+n)? #38
Цитата Сообщение от rangerx Посмотреть сообщение
как я и сказал, всё зависит от компилятора и его настроек
Варианты без оптимизация вообще не имеет смысла сравнивать, когда речь идёт о том, какая конструкция быстрее. Включи хотя бы уровень -O1 и будет всё одинаково. На любом вменяемом компиляторе
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
10.07.2012, 21:44     Массив: Что быстрее: mass[n] или *(mass+n)? #39
Ребят ну вы так и не ответили,не ужели через указатель не быстрее ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2012, 21:47     Массив: Что быстрее: mass[n] или *(mass+n)?
Еще ссылки по теме:

Что быстрее assembler или c++ C++
If или switch().case. Что быстрее C++
C++ Что быстрее: i++ или ++i ?

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
10.07.2012, 21:47     Массив: Что быстрее: mass[n] или *(mass+n)? #40
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Ребят ну вы так и не ответили,не ужели через указатель не быстрее ?
Ответили же, что разницы никакой
Yandex
Объявления
10.07.2012, 21:47     Массив: Что быстрее: mass[n] или *(mass+n)?
Ответ Создать тему
Опции темы

Текущее время: 06:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru