Pameť a C -=-=-=-=-=- In the beginning was the Tao. The Tao gave birth to Space and Time. Therefore, Space and Time are the Yin and Yang of programming. Programmers that do not comprehend the Tao are always running out of time and space for their programs. Programmers that comprehend the Tao always have enough time and space to accomplish their goals. How could it be otherwise? -- Geoffrey James, "The Tao of Programming" V tomto článku bych se chtěl podívat na různé prostředky pro zprávu dynamické paměti v C jako jsou funkce správu haldy, utility pro kontrolu správnosti programu či garbage-collecting. Protože velké množství těchto prostředků je závislých na platformě, zaměřím se zejména na dvě mnou prozkoumané platformy - GNU/Linux (a UNIXové systémy) a DJGPP (GNU překladač pro DOS). Každý asi ví, že C dělí paměť na tři zákládní části - inicializovaná data, zásobník a haldu. Inicializovaná data se naplní při linkování programu a obsahují statické proměné. Z mého pohledu je tato sekce nyní nezajímavá. Zásobník se přiděluje automaticky při volání funkce a haldu většina programů přenechává voláním malloc a free. V UNIXu jsou většinou procesy organizovány tak, že halda a zásobník jsou na opačných koncích adresovatelného prostoru a rostou proti sobě. Tím pádem můžou růst prakticky neomezeně. Konec haldy určuje ukazatel break, za kterým je paměť už pro program nepřístupná. Posouvání tohoto ukazatele se provádí pomocí volání brk a sbrk. break v ----------------------------------------- | halda | | zásobník | ----------------------------------------- Dynamická alokace zásobníku Alokace haldy Kontrola správnosti použití paměti Garbage Collector Literatura výheň