Portál AbcLinuxu, 9. května 2025 21:39
Řešení dotazu:
... prvků v této množině může být klidně i 106 ... Napište program, který ji zpracuje."Každý rok to číslo dávají vyšší. A potom baví okolí tím, že vyprávějí kolik lidí tu paměť ve svém projektu alokuje staticky na zásobníku. Takže rada na závěr - nastuduj si
malloc()
a free()
. A popřemýšlej, jestli je pole přesně to, co potřebuješ (jestli by se třeba neuplatnil spojový seznam).
Ak sa da nieco implementovat cez pole, pouzil by som pole.
Spojak je pomaly a neefektivny, ci uz berieme zabranu velkost alebo len rychlost priechodu od zaciatku do konca. Pristup cez pointery nieco stoji, nefunguje tu rozumne prednacitanie (ked su data po celej pamati) a pri pridavani kazdeho noveho prvku je treba volat pomerne pomaly malloc.
Keby to nejak zoskupoval a robil by spojak poli, tak by to bolo snad o trochu lepsie. Takto je napriklad na mojom systeme overhead na 1 prvok 8B (4B malloc + 4B pointer na dalsi prvok) pri velkosti prvku 4B (long). To znamena az 3x vacsiu spotrebu pamati.
Staci vkladat na koniec pola namiesto na zaciatok a hned mame tiez konstantu.
Viem, ze je niekedy jednoducho treba pouzit spojak, ale v tom pripade si ho reprezentujem (ako som spomenul vyssie) spojakom poli, aby sa zaroven vyuzilo vyhod poli.
Graf (a zlozitejsie struktury) davam tiez najradsej do pola, lebo taketo rozvhnutie lepsie vyuziva pamat a cache (medzi zaznamami nie su "poznamky" od mallocu, takze nastava menej aliasingu pri cache-ovani), zo skusenosti to bezi rychlejsie ako "pointerami implementovany" graf (spojak) a v debug verzii je mozne velmi jednoducho spravit kontrolu, ktora overuje validitu adries (tu ide o indexy do pola) a pritom to upozorni na problemy.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.