- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
int func() {
try {
throw 1;
} catch (int i) {
return i;
}
}
asm:
func():
push rbp
mov rbp, rsp
push rbx
sub rsp, 24
mov edi, 4
call __cxa_allocate_exception
mov DWORD PTR [rax], 1
mov edx, 0
mov esi, OFFSET FLAT:typeinfo for int
mov rdi, rax
call __cxa_throw
cmp rdx, 1
je .L5
mov rdi, rax
call _Unwind_Resume
.L5:
mov rdi, rax
call __cxa_begin_catch
mov eax, DWORD PTR [rax]
mov DWORD PTR [rbp-20], eax
mov ebx, DWORD PTR [rbp-20]
call __cxa_end_catch
mov eax, ebx
add rsp, 24
pop rbx
pop rbp
ret
gcc 6.2. Ицц/шланг туда же. But why?
someone 21.12.2016 17:11 # 0
subaru 21.12.2016 17:27 # 0
myaut 21.12.2016 17:30 # +2
subaru 21.12.2016 17:35 # 0
PS: Я не знаю и не утверждаю, может ли конпилятор позволить себе такие оптимизации. Возможно там есть какие-то нюансы у throw.
myaut 21.12.2016 17:48 # 0
P.S. Lol: http://i.imgur.com/vTIeJhf.png
subaru 21.12.2016 18:08 # +1
Antervis 22.12.2016 15:46 # 0
subaru 22.12.2016 16:28 # 0
gost 21.12.2016 22:15 # +1
Дайте Бросьте два!
subaru 21.12.2016 17:40 # +1
Antervis 22.12.2016 08:48 # 0
dxd 22.12.2016 10:09 # +3
Psionic 22.12.2016 14:06 # −3
huesto 22.12.2016 14:20 # +2