С++ Есть ли какие-либо две функции, которые не выдают один и тот же ассемблерный код при компиляции с -O3: одна с указатC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 С++ Есть ли какие-либо две функции, которые не выдают один и тот же ассемблерный код при компиляции с -O3: одна с указат

Сообщение Anonymous »

Мне хотелось лучше понять ссылки, поэтому я поигрался с кодом на C++, чтобы увидеть разницу между ссылками и указателями. Когда они скомпилировались в ассемблер (-O3), я понял, что они оба дают один и тот же ассемблерный код.
Мне интересно, существует ли какая-нибудь функция, которая выдает другой ассемблерный код, когда мы используем ссылки вместо указателей в качестве параметра.
Это легче понять на примере: (Я использовал godbolt чтобы увидеть выходные данные сборки.)
struct someStruct
{
int a;
int* ptr;
someStruct* next;
};

int f1(someStruct* v)
{
v->a = v->next->a + *v->next->ptr;
v->ptr = v->next->ptr;
v->next = v;
return v->a;
}

int f1(someStruct& v)
{
v.a = v.next->a + *v.next->ptr;
v.ptr = v.next->ptr;
v.next = &v;
return v.a;
}

Эти две функции дают один и тот же ассемблерный код x86:
f1(someS*): # @f1(someS*)
mov rcx, qword ptr [rdi + 16]
mov rdx, qword ptr [rcx + 8]
mov eax, dword ptr [rdx]
add eax, dword ptr [rcx]
mov dword ptr [rdi], eax
mov qword ptr [rdi + 8], rdx
mov qword ptr [rdi + 16], rdi
ret


Подробнее здесь: https://stackoverflow.com/questions/784 ... n-compiled
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»