[so] assert

Alin Popescu alinpopescu at live.com
Mon Jun 22 13:33:54 EEST 2009


Salut
Ma gandesc ca daca ai o aplicatie critica, atunci e nevoie de error handling.

Pe de alta parte daca esti in user space si apelezi un malloc sau functii de sistem, atunci chiar nu vad cum te-ar putea ajuta branch prediction.
Problema cu branch prediction este ca daca se intampla sa greseasca, atunci va trebui sa goleasca instruciunile care se afla deja in pipeline. Deci se vor pierde cateva cicluri procesor.
Iar daca se intampla sa iti returneze null sau altceva decat ceea ce te asteptai, singura masura pe care o vad sa o poti lua este sa afisezi un mesaj si sa inchei executia.
Iar daca totusi te incapatanezi si folosesti null = 0x100 atunci vei avea o exceptie si este safe :-).

Date: Mon, 22 Jun 2009 12:32:40 +0300
From: cosminratiu at gmail.com
To: so at cursuri.cs.pub.ro
Subject: Re: [so] assert


2009/6/20 Alin Popescu <alinpopescu at live.com>

So, my point is, la temele la so era absolut nevoie sa verificam in 'release' toate codurile de eroare? Banuiesc ca raspunsul

va fii DA!. Este o intrebare semi-retorica.
Assert e folosit pentru a verifica preconditiile, nu pentru a prinde cazurile de
erori normale ce pot aparea in timpul executiei (memorie plina in cazul
asta... bine, discutia e mai lunga pe Linux). In momentul cand 



In cazul alocarii memoriei, poti folosi perror("mesaj") pt. ca desi malloc nu e apel de sistem, se seteaza errno la ENOMEM.

Ca sa iti raspund la intrebare, verificatul erorilor in teme este un exercitiu, pentru a va invata Good Programming Practice.

Intr-un program real, este important sa fii paranoic pentru a avea o aplicatie robusta. De accea assert e destul de inutil pentru ca vrei ca verificatul _erorilor_ ce pot aparea sa ramana si in release.



Din cate imi amintesc, assert nu incetineste aplicatia finala, pentru ca este scos odata ce aplicatia este compilata ca release.

If-ul inseamna hazard de control, sageata albastra de la dreapta la stanga din cartea lui Patterson, a dus la branch prediction si multe complicatii.
Asta este caz de micro optimizare inutila. Procesoarele de azi au branch prediction destul de bun, care poate fi chiar ajutat prin folosirea directivei __builtin_expect (likely si unlikely din kernel). In plus, la cateva sute de milioane de instructiuni pe secunda, un if nu conteaza.


Cosmin.

_________________________________________________________________
More than messages–check out the rest of the Windows Live™.
http://www.microsoft.com/windows/windowslive/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090622/26123837/attachment.htm>


More information about the so mailing list