Hlavní navigace

Názor ke článku Kudy dál v kompilovaných jazycích? od zilogat0r - [96] a bozky Chnushnus kompilator to dela bez...

  • 4. 12. 2007 16:38

    zilogat0r (neregistrovaný)

    [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(%eb­p),%eax
    80485c5: 89 45 ec mov %eax,0xffffffe­c(%ebp)
    p->ahoj();
    80485c8: 83 c4 f4 add $0xfffffff4,%esp
    80485cb: 8b 55 ec mov 0xffffffec(%eb­p),%edx
    80485ce: 8b 42 04 mov 0x4(%edx),%eax
    80485d1: 83 c0 0c add $0xc,%eax
    80485d4: 8b 55 ec mov 0xffffffec(%eb­p),%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(%eb­p),%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...