[OSy] Test as1/mutex5 a free(const void *)

Radim Vansa radim.vansa at matfyz.cz
Mon Oct 26 17:31:08 CET 2009


Díky za rychlou odpověď,

ad 1) Aha, takže mít opravdu dvě verze mutexu (mutex_debug.c a 
mutex_release.c) ... trochu bych se obával, že se to bude špatně 
synchronizovat, obzvláště tedy v případě, kdy bych měl ještě více takto 
podmíněných věcí (čímž mi vlastně vzniká exponenciální počet souborů 
vůči počtu přepínačů).

ad 2) Je dost možné, že špatně chápu jazyk C, nicméně podle

http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html

znamená výraz "const void *" ukazatel na nemodifikovatelnou paměť, pokud 
bych chtěl mít nemodifikovatelný ukazatel na modifikovatelnou paměť, 
jednalo by se o "void * const". Jestli jsem jenom zmatený, mlžím, neumím 
anglicky, nebo je ta C book špatně, tak se omlouvám.

Radim Vansa

Martin Decky napsal(a):
> Hezky den,
>
>> To by vyžadovalo, aby makro bylo definováno v nějakém
>> hlavičkovém souboru, který mutex.c inkluduje.
>
> V tomto pripade Vam pochopitelne nepomuze podle hodnoty makra menit 
> to, co bude kod delat, tedy mit konstrukce typu
>
> #ifdef DEBUG_MUTEX
> ...
> #endif
>
> v souboru mutex.c. To by samozrejme neumoznovalo menit, jaky kod bude 
> mutex.o obsahovat pote, co je jednou prelozen.
>
> Muzete vsak podle hodnoty makra menit, ktery kod se pouzije ve 
> vyslednem obrazu kernelu pouzije. Tedy napriklad pouzit konstrukce 
> #ifdef v hlavickovem souboru mutex.h.
>
> Zkuste si uvedomit, proc se hodnota makra DEBUG_MUTEX nastavuje v 
> souboru as1/mutex5/test.c _pred_ inkludovanim souboru api.h.
>
>
> Kdyz se podivate do hlavickovych souboru ruznych standardnich 
> ceckovych knihoven, pravdepodobne tam taky najdete spoustu pripadu, 
> kdy muzete podobnym mechanismem ovlivnit chovani knihovny, aniz byste 
> museli mit vice ruznych buildu (v techto situacich se asi casteji 
> pouziva prepinac -D na prikazove radce prekladace, jak uz psal pan 
> Demin).
>
>> Druhý dotaz je na hlavičku funkce free(const void *) a potažmo i další
>> funkce ze druhého zadání, které vracejí nějaký kus paměti systému. Proč
>> je tam to const? Systém přece může po uvolnění páchat cokoliv na daném
>> kusu paměti, volající kód nemůže spoléhat, že se uvolněná paměť nebude
>> měnit.
>
> Ten "const" se pochopitelne tyka pouze toho ukazatele, nikoliv pameti, 
> na kterou argument ukazuje.
>
> Myslim si, ze je naopak dobra praktika uvadet in argumenty funkci jako 
> const. Zabrani se tak tomu, aby se uvnitr funkce tyto argumenty omylem 
> pouzily (pripadne zneuzily) jako lokalni promenne.
>
>
> M.D.
>
> _______________________________________________
> OSy mailing list
> OSy at dsrg.mff.cuni.cz
> https://dsrg.mff.cuni.cz/mailman/listinfo/osy
>
>





More information about the NSWI004 mailing list