CHAPTER 51. C++ CHAPTER 51. C++
ret 0
?dump@box@@QAEXXZ ENDP ; box::dump
Listing 51.13: Optimizing MSVC 2008 /Ob0
?dump@solid_object@@QAEXXZ PROC ; solid_object::dump, COMDAT
; _this$ = ecx
mov eax, DWORD PTR [ecx]
push eax
; 'this is solid_object. density=%d', 0aH
push OFFSET ??_C@_0CC@KICFJINL@this?5is?5solid_object?4?5density?$DN?$CFd@
call _printf
add esp, 8
ret 0
?dump@solid_object@@QAEXXZ ENDP ; solid_object::dump
Listing 51.14: Optimizing MSVC 2008 /Ob0
?dump@solid_box@@QAEXXZ PROC ; solid_box::dump, COMDAT
; _this$ = ecx
mov eax, DWORD PTR [ecx+12]
mov edx, DWORD PTR [ecx+8]
push eax
mov eax, DWORD PTR [ecx+4]
mov ecx, DWORD PTR [ecx]
push edx
push eax
push ecx
; 'this is solid_box. width=%d, height=%d, depth=%d, density=%d', 0aH
push OFFSET ??_C@_0DO@HNCNIHNN@this?5is?5solid_box?4?5width?$DN?$CFd?0?5hei@
call _printf
add esp, 20
ret 0
?dump@solid_box@@QAEXXZ ENDP ; solid_box::dump
So, the memory layout for all three classes is:
boxclass:
offset description
+0x0 width
+0x4 height
+0x8 depth
solid_objectclass:
offset description
+0x0 density
It can be said that thesolid_boxclass memory layout isunited:
solid_boxclass:
offset description
+0x0 width
+0x4 height
+0x8 depth
+0xC density
The code of thebox::get_volume()andsolid_object::get_density()methods is trivial:
Listing 51.15: Optimizing MSVC 2008 /Ob0
?get_volume@box@@QAEHXZ PROC ; box::get_volume, COMDAT
; _this$ = ecx
mov eax, DWORD PTR [ecx+8]
imul eax, DWORD PTR [ecx+4]
imul eax, DWORD PTR [ecx]
ret 0
?get_volume@box@@QAEHXZ ENDP ; box::get_volume