Odpovídáte na názor ke článku Kudy dál v kompilovaných jazycích?.
[96] a bozky Chnushnus kompilator to dela bez toho, aby neco zjistoval?
ne-e. bud je to staticky objekt, a pak uz identifikator rika, co to je (coz MUSI programator vedet take, sak ho zakladal), a nebo je dynamicky, a pak saha do objektu:
p=(_a *)&b;
80485c2: 8d 45 f0 lea 0xfffffff0(%ebp),%eax
80485c5: 89 45 ec mov %eax,0xffffffec(%ebp)
p->ahoj();
80485c8: 83 c4 f4 add $0xfffffff4,%esp
80485cb: 8b 55 ec mov 0xffffffec(%ebp),%edx
80485ce: 8b 42 04 mov 0x4(%edx),%eax
80485d1: 83 c0 0c add $0xc,%eax
80485d4: 8b 55 ec mov 0xffffffec(%ebp),%edx
80485d7: 52 push %edx
80485d8: 8b 18 mov (%eax),%ebx
80485da: ff d3 call *%ebx
80485dc: 83 c4 10 add $0x10,%esp
v nejlepsi verzi (-O4) takto:
p=(_a *)&b;
80485e7: 8d 55 f0 lea 0xfffffff0(%ebp),%edx
p->ahoj();
80485ea: 83 c4 f4 add $0xfffffff4,%esp
80485ed: 8b 42 04 mov 0x4(%edx),%eax
80485f0: 52 push %edx
80485f1: 8b 40 0c mov 0xc(%eax),%eax
80485f4: ff d0 call *%eax
... tj ZBYTECNA reference, i mirne podnapileho C programatora by jiste napadlo dat primo do objektu pri vzniku pointer na funkcni, nastaveny na tu pozadovanou - a hned mame o referenci mene, a ze 4 instrukci jednu.
A to je prosim g++ na maximalni level optimalizace, a tuto trivialitu, kdy lze nahradit blbou _vptr primou referenci (objekt mel jen 1 virt. metodu) samozrejme NEpochytilo. Jak v necem takovem chcete vytvaret, boha, optimalni kod, kdyz to i v trivialnim pripade emituje 4x vice instrukci, nez by napadlo i toho nejpritroublejsiho assembleristu?!?!
Takze stop bullshit, a misto cancu vezmete dbg...