почему указатель более эффективен, чем используемый массив - PullRequest
0 голосов
/ 16 апреля 2010

почему указатель более эффективен или превосходит объявление массива?

Ответы [ 3 ]

5 голосов
/ 16 апреля 2010

Вы сравниваете яблоки с апельсинами.

Указатель содержит значение, которое является адресом другой переменной. Массив - это непрерывная коллекция элементов. Они не одинаковы.

Если вы уточните свой вопрос, мы могли бы дать вам лучший ответ. В нынешнем виде это довольно бессмысленно.

1 голос
/ 16 апреля 2010

Это не так. Согласно стандарту C, a[x] является просто синтаксическим сахаром для *(a+x). Фактически, современные процессоры могут генерировать иногда более быстрый код, если вместо простой арифметики указателей используется a[x], так как некоторые статические анализы могут вычислять больше информации в этом случае, обеспечивая более агрессивную оптимизацию. Причина в том, что анализ псевдонимов проще.

0 голосов
/ 16 апреля 2010

В моем тестировании (несколько лет назад) я обнаружил совершенно противоположное - ссылка на массив была быстрее, чем указатель. Я думаю, что это было с MSVC 6.0. Все зависит от кода ассемблера, который компилятор решит сгенерировать, и это совершенно произвольно.

Чтобы уточнить, я сравнивал что-то вроде следующего:

for (int i = 0;  i < length;  ++i)
    sum += p[i];

for (int i = 0;  i < length;  ++i)
    sum += *p++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...