neděle 29. srpna 2010

Pointer hell

Trošku jsem se ponořil do programování své bakalářky. Píšu ji v C++. Standardní knihovny C++ obsahují některé kontejnery, ne nepodobné datovým typům z jiných programovacích jazyků. Například vector pro pole, mapa pro asociativní pole, frontu nebo zásobník.

Výhodou těchto kontejnerů je fakt, že již není nutné pracovat s ukazateli přímo do paměti a s low-level správou paměti. Nevýhodou je jejich obecnost a s tím spojená časová i prostorová náročnost.

Představte si situaci, kdy potřebujete uložit do paměti pole s více než 13000 prvky netriviálního typu (tedy žádný integer, ale nějaká složená struktura, představme si to jako pascalovský record). S použitím standardních kontejnerů v C++ mi po načtení cca 2500 prvků z disku došla fyzická paměť počítače.

Takže tudy cesta skutečně nevede. Je tedy zjevně potřeba oprášit 40 let staré koncepty práce s pamětí přesně tak, jak tomu bylo v čistém C. Tedy používání pointerů a dvojici funkcí malloc a free.

A nutno uznat, že takovýto způsob nakládání s pamětí není nijak jednoduchý. Ono přeci jen, když máte ukazatel na ukazatel na integer a k ukazateli lze bez problémů přičíst integer, lze se splést velice snadno. Ale tak co, aspoň se něco malého naučím ;-)

Žádné komentáře:

Okomentovat