[so] assert

Cosmin Ratiu cosminratiu at gmail.com
Mon Jun 22 12:32:40 EEST 2009


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090622/3b4ca713/attachment.htm>


More information about the so mailing list