eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingwydajnosc wyjatkowRe: wydajnosc wyjatkow
  • Data: 2012-03-28 16:11:10
    Temat: Re: wydajnosc wyjatkow
    Od: Edek Pienkowski <e...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia Wed, 28 Mar 2012 13:32:27 +0000, M.M. napisal:

    > Edek Pienkowski <e...@g...com> napisał(a):

    >
    >> Musi być kod robiący wszystko to, co jest przewidziane. W C++ oznacza
    >> to destrukcję lokalnych obiektów, sprawdzenie catch-clauses i
    >> unexpected-handlera, poza samym stack unwind.
    > No tak, ale to wszystko musi także wykonać bez wyjątków w
    > momencie gdy napotyka return?

    No nie w tym samym miejscu, mniej optymalizowalne, w skrócie
    trochę się to różni:

    OnStack s1();

    call_meth();

    OnStack s2();
    ...

    Jeżeli call rzuci, to musi tylko s1 skasować.

    Jeżeli nie używa się wyjątków, kompilowanie z wyjątkami
    generuje kod "skasuj tylko s1". Czy jakoś tak, chodzi mi
    raczej o ogólną zasadę niż konkretnie o ten przykład.

    > Hmmm a tak na marginesie gdy napotyka
    > longjump to co robi? Też robi destrukcje obiektów na stosie?

    Na mojej mapie longjmp jest tam gdzie mieszkają smoki.

    >
    >
    >> > Gdy kompilator napotyka koniec sekcji catch to co musi zrobić? Chyba tylko
    >> > musi usunąć ze stosu to co wcześniej na nim zapamiętał. Więc o wydajności
    >> > decyduje sposób w jaki to kompilator zapamiętuje.
    >
    >
    >> (?) Nie kompiluje mi się to co napisałeś.
    > Nie wiem dokładnie jak nowoczesne kompilator/optymalizatory realizują obsługę
    > wyjątków. Wyobrażam sobie to jako jakąś strukturę stosową. Gdy
    > wykonanie programu dochodzi do sekcji try to na tą strukturę odkładana
    > jest jakaś informacja. Więc gdy wykonanie programu dojdzie do końca
    > sekcji catch to coś z tej struktury stosowej musi zdjąć. Jest to
    > związane z jakimś narzutem. Nie wiem na pewno, ale wydaje się że ów
    > narzut jest bardzo mały.

    Te implementacje które znam działają inaczej. Stos jest właściwie
    taki sam jak bez wyjątków; wyjątki robią procedurę zwijania stosu
    aż znajdą odpowiedni handler.

    Polecam wikipedię, sam poczytam o innych implementacjach, bo wiem
    że istnieją inne.

    >
    >> Sam fakt, że wyjątek ma stos zmienia optymalizacje. W c++
    >> stos zależy od optymalizacji; w Javie generalnie nie, ale czasami
    >> tak.
    > Hmmmm zapewne tak. Ale czy to nie jest podobne utrudnienie optymalizacji
    > dla kompilatora jak po dodaniu instrukcji if? Kompilator generuje gorszy
    > kod gdy są wyjątki?

    Jeżeli w kodzie nie ma wyjątków a kompiluje się z wyjątkami, jest
    trosecke niepotrzebnego kodu. Ten kod nie powinien za bardzo
    spowalniać, powinien być traktowany jako slow-path.

    W sumie ciekawe pytanie, nie wiem, ale cokolwiek się napisze
    ma wpływ na optymalizacje (poza abstraction penalty, które już
    od dość dawna prawie nie istnieje).

    Edek

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: