C ?, valgrind -O2, . ? :
string2 = malloc(33);
strcpy (string2, "Hello");
...
printf("Bye\n");
string2 "Hello" sting2, string2 . , string2 , , .
"" , , , . , string2, , , .
(, , printf string2, , , printf string2)
, , , (gcc -S , -masm=intel, intel ATT)
-O0. :
.cfi_startproc
push rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
mov rbp, rsp
.cfi_def_cfa_register 6
sub rsp, 48
mov DWORD PTR [rbp-4], 0
mov QWORD PTR [rbp-16], 0
mov QWORD PTR [rbp-24], 0
mov QWORD PTR [rbp-32], OFFSET FLAT:.LC0
mov QWORD PTR [rbp-40], 0
mov edi, 33
call malloc ; the call to malloc is retained
mov QWORD PTR [rbp-40], rax
mov rax, QWORD PTR [rbp-40]
mov DWORD PTR [rax], 1819043144
mov WORD PTR [rax+4], 111
mov rax, QWORD PTR [rbp-32]
mov rdi, rax
call strlen
mov QWORD PTR [rbp-16], rax
mov rax, QWORD PTR [rbp-40]
mov rdi, rax
call strlen
mov QWORD PTR [rbp-24], rax
mov rax, QWORD PTR [rbp-16]
cmp rax, QWORD PTR [rbp-24]
je .L2
mov DWORD PTR [rbp-4], 5
jmp .L4
( gcc (GCC) 6.1.1 20160602 -Ofast):
.cfi_startproc
sub rsp, 8
.cfi_def_cfa_offset 16
mov edi, OFFSET FLAT:.LC0
call puts
xor eax, eax
add rsp, 8
.cfi_def_cfa_offset 8
ret
.cfi_endproc
malloc - . , , .
, valgrind , , valgrind , . , , - , /, , , - . , :
gcc -S -masm=intel -Ofast -o valgrindtest.asm valgrindtest.c
valgrindtest.asm. , .