Эффективность: массивы против указателей

Доступ к памяти через указатели считается более эффективным, чем доступ к памяти через массив. Я изучаю C, и вышеизложенное указано в K & R. Конкретно они говорят

Любая операция, которая может быть достигнута путем подписки массива, также может быть выполнена с помощью указателей. Версия указателя в целом будет быстрее

Я разобрал следующий код, используя Visual C ++. (Мой - процессор 686. Я отключил все оптимизации.)

int a[10], *p = a, temp;

void foo()
{
    temp = a[0];
    temp = *p;
}

К моему удивлению, я вижу, что доступ к памяти через указатель занимает 3 инструкции для двух, полученных при обращении к памяти через массив. Ниже приведен соответствующий код.

; 5    : temp = a[0];

    mov eax, DWORD PTR _a
    mov DWORD PTR _temp, eax

; 6    : temp = *p;

    mov eax, DWORD PTR _p
    mov ecx, DWORD PTR [eax]
    mov DWORD PTR _temp, ecx

Пожалуйста, помогите мне понять. Что мне здесь не хватает ??

Как указывалось во многих ответах и ​​комментариях, я использовал постоянную времени компиляции в качестве индекса массива, что значительно облегчило доступ через массив. Ниже приведен код сборки с переменной в качестве индекса. Теперь у меня одинаковое количество инструкций для доступа через указатель и массив. Мои более широкие вопросы остаются в силе. Доступ к памяти через указатель не является более эффективным.

; 7    :        temp = a[i];

    mov eax, DWORD PTR _i
    mov ecx, DWORD PTR _a[eax*4]
    mov DWORD PTR _temp, ecx

; 8    : 
; 9    :    
; 10   :        temp = *p;

    mov eax, DWORD PTR _p
    mov ecx, DWORD PTR [eax]
    mov DWORD PTR _temp, ecx

Ответы на вопрос(13)

Ваш ответ на вопрос