Почему компилятор GCC добавляет эти три строки при использовании double, а не когда Int?Int vs Double in assembly
С междунар:
#include <cstdio>
int main(){
int i = 1;
}
==>
main:
push ebp
mov ebp, esp
sub esp, 16
mov DWORD PTR [ebp-4], 1
mov eax, 0
leave
ret
С двойной:
#include <cstdio>
int main(){
double i = 1;
}
==>
main:
lea ecx, [esp+4] // This three lines
and esp, -8 // ...
push DWORD PTR [ecx-4] // ...
push ebp
mov ebp, esp
push ecx
sub esp, 20
fld1
fstp QWORD PTR [ebp-16]
mov eax, 0
add esp, 20
pop ecx
pop ebp
lea esp, [ecx-4]
ret
Аналогично происходит при использовании указателей, например, int * s = new int (4);
Можете ли вы объяснить, почему это происходит, и почему не всегда?
Если вы не используете переключатель '-O3', компилятор генерирует код, который может быть избыточным или бессмысленным (хотя и по-прежнему правильным) –
Да, я знаю. Я просто изучаю :) –
Является ли это C или C++? Это разные языки, и для ввода/выхода функции, вероятно, будет создан код с кодом. – Olaf