*****SPAM***** Re: C _ jak rozepsat ?__ádek

Josef Štengl ok1ced na nagano.cz
Neděle Duben 28 23:10:31 CEST 2013


No, já jsem to pochopil tak, že string.h je knihovní funkce a je 
součástí překladače a proto může být optimalizována pro cílovou 
platformu. Pokud to jde. Například tím, že je znám adresový prostor, tak 
překladač bude používat tu „správnou“ verzi funkce. Nebo si ji můžete 
napsat sám a máte po problémech :-).

Nečetl jsem implementace memcpy pro GCC protože jsem ji hned nenašel a u 
implementace pro linuxový kernel je upozornění ve smyslu nepoužívat pro 
I/O, na to jsou jiné funkce.

ced


Dne 28.4.2013 22:04, Jaroslav Buchta napsal(a):
> Jak muze knihovni funkce brat v uvahu nejaky typ ukazatele, kdyz ma
> dostat podle deklarace void* cili proste dejme tomu 32b adresu a vic by
> ji nemelo zajimat???
> Ja beru asi C jednoduse, takoveto chovani bych spis predpokladal treba u
> C#, kde uz kaslu na vsechno a cekam, ze si s tim prekladac poradi nebo
> ohlasi chybu...
>
> Dne 28. 4. 2013 21:59, Jan Waclawek napsal(a):
>>> Vzhledem k tomu, ze memcpy ma ukazatele jako void* tak se musi poprat se
>>> vsemi zaludnostmi, ne?
>> To void* je formalna deklaracia, ktorou sa hovori, ze memcpy() ma
>> akceptovat akykolvek pointer. V skutocnosti moze byt memcpy()
>> implementovany tak, ze berie typ pointra do uvahy (a moze sa inlinovat,
>> generovat kompilatorom, atd.atd. - ale to nesuvisi, len ilustruje, ze
>> nemusite len z citania kniznice vediet, ako to presne bude prelozene); a
>> ak je to pointer na word, tak ta implementacia moze predpokladat spravne
>> zarovnanie. Ba dokonca pointer moze priamo v sebe niest typ na ktory
>> ukazuje - implementacia pointra nie je predpisana, len jeho spravanie. No
>> a pointa toho, preco memcpy() ma v nasom konkretnom pripade dovolene
>> zlyhat je v tom, ze uz tym pretypovanim nespravne zarovnaneho
>> cisla/pointra vznikne nespravny pointer, a jeho pouzitie *kdekolvek* inde
>> v programe (t.j. aj v kniznicnej funkcii) moze vyvolat chybu;
>> pretypovanie
>> (ci uz formalne alebo explicitne) na void* ten pointer automaticky
>> "neopravi".
>>
>> Toto je ten zasadny rozdiel medzi "mne to funguje" a skutocnym programom.
>>
>>> Taky jsem to jednou zkoumal a zarovna si zacatek,
>>> konec po Bytech nebo half wordech a prostredek jede po wordech...
>> Skumali ste jednu konkretnu implementaciu. Pisal som predsa, ze
>> zadrhel je
>> v prenositelnosti; este som uviedol aj konkretny pripad, kde Vam to
>> fungovat nebude. Pokuste sa raz nebyt taky povrchny a citat vsetko.
>>
>>> Zrovna tak jako memmove by mela resit prekryti oblasti libovolnym
>>> zpusobem.
>> To s tym vobec nijako nesuvisi; tato vlastnost memmove vyplyva z jej
>> definicie.
>>
>> wek
>> -
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list