malloc/free

Miroslav Šinko sinkomiro na gmail.com
Čtvrtek Listopad 3 02:10:26 CET 2016


Dovolil by som si nesuhlasit s tym, ze moze nastavat bod 2. Aspon teda 
pre pre zakladne funkcie malloc, calloc, realloc a vyraz "pointer", na 
ktory bola otazka. To by znamenalo, ze pointer vrateny kniznicnou 
alokacnou funkciou a ulozeny "aplikacnym" programom lubovolnym sposobom 
by casom mohol stratit platnost. Norma hovori nasledovne:

7.20.3 Memory management functions
1 The order and contiguity of storage allocated by successive calls to 
the calloc, malloc, and realloc functions is unspecified. The pointer 
returned if the allocation succeeds is suitably aligned so that it may 
be assigned to a pointer to any type of object and then used to access 
such an object or an array of such objects in the space allocated
(until the space is explicitly deallocated). The lifetime of an 
allocated object extends from the allocation until the deallocation.

T.j. pointer ukazuje na objekt a zivotnost objektu trva az do dealokacie.

Existuju implementacie, kde je umoznene "nejakemu spravcovi" 
preusporiadavat alokovane bloky pamati a tym aj menit hodnotu pointera, 
ale aj tam existuje "pevny bod" na pristup k pamati a aplikacnym 
programom urcovana doba platnosti pointera, t.j. nemoze byt len tak 
zneplatneny kniznicou na pozadi.
Napr. WinAPI funkcia GlobalAlloc pri pouziti flagu GMEM_MOVEABLE vracia 
handle (to je ten peny bod, ktoreho hodnota sa nemeni) a nie pointer. 
Ten sa ziska az naslednym volanim GlobalLock. Dokym sa nezavola 
GlobalUnlock, je pointer platny. Mimo zamknutia si moze spravca pamati 
alokovany blok presunut ako potrebuje. Teda po dalsom volani GlobalLock, 
so stale platnym handlom, moze vratit iny pointer.

miro


On 3.11.2016 1:40, Jan Waclawek wrote:
> Vsetky tri. Je to vec pouzitej kniznice.
>
> wek
>
>
>
> ----- Original Message ---------------
>> Dobrý den v¹em,
>>
>> mìjme program v C, bì¾ící v MCU s nìkolika desítkami kB RAM.
>>
>> Program èas od èasu alokuje nìjakou pamì» a jindy zas odalokuje.
>> Pøedpokládejme, ¾e se alokují kousky od nìkolika B a¾ do nìkolika kB.
>> Alokace a dealokace se dìjí v obecnì náhodném poøadí, tedy rùzné kousky
>> pamìti jsou alokovány na rùznou dobu.
>>
>> 1. Mù¾e se stát, ¾e se pamì» postupnì fragmentuje tak, ¾e od jistého
>> okam¾iku ji¾ nepùjde alokovat nìjaké vìt¹í kousky, pøesto¾e celkové místo by
>> bohatì staèilo?
>> 2. Pokud se nedìje (1), mù¾e se stát, ¾e nìjaký správce pamìti bude v
>> prùbìhu èasu ji¾ alokované kusy v pøípadì nutnosti pøesouvat, tak¾e se budou
>> mìnit hodnoty pointerù na nì ukazujících?
>> 3. Nebo to funguje úplnì jinak? :-)
>
> _______________________________________________
> 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