JiiPee <
n...@notvalid.com> writes:
>Was coding and started to think about this:
>
>1)
>struct A
>{
> int a;
> void change() { a = 5; }
>};
>
$ cat /tmp/a.c
struct A { int a; void change(void) { a = 5; } };
int main(int argc, const char **argv, const char **envp)
{
A a;
a.change();
return 0;
}
00000000004005d6 <A::change()>:
4005d6: 55 push %rbp
4005d7: 48 89 e5 mov %rsp,%rbp
4005da: 48 89 7d f8 mov %rdi,-0x8(%rbp)
4005de: 48 8b 45 f8 mov -0x8(%rbp),%rax
4005e2: c7 00 05 00 00 00 movl $0x5,(%rax)
4005e8: 5d pop %rbp
4005e9: c3 retq
4005ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
>2)
>struct X
>{
> int a;
>};
>
>struct A
>{
> X x;
> void change() { x.a = 5; }
>};
>
$ cat /tmp/a.c
struct X { int a; };
struct A { X x; void change(void) { x.a = 5; } };
int main(int argc, const char **argv, const char **envp)
{
A a;
a.change();
return 0;
}
00000000004005d6 <A::change()>:
4005d6: 55 push %rbp
4005d7: 48 89 e5 mov %rsp,%rbp
4005da: 48 89 7d f8 mov %rdi,-0x8(%rbp)
4005de: 48 8b 45 f8 mov -0x8(%rbp),%rax
4005e2: c7 00 05 00 00 00 movl $0x5,(%rax)
4005e8: 5d pop %rbp
4005e9: c3 retq
4005ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
Both varieties generate identical code.