4.1. Manuální správa paměti

Při manuální správě paměti má programátor plnou kontrolu nad tím, zda a ve kterém okamžiku bude paměť uvolněna a případně využita pro opakované přidělení. To obvykle nastává buď explicitním voláním funkcí pro přidělování a uvolňování paměti z hromady (např. malloc/free v jazyce C), nebo jazykovými konstrukcemi ovlivňujícími zásobník (např. pro lokální proměnné). Klíčovou vlastností manuální správy paměti je možnost, aby program sám vrátil část paměti a oznámil, že ji již dále nepotřebuje. Bez tohoto oznámení správa paměti žádný úsek opakovaně nevyužije.

V následující ukázce je uvedena funkce, která vytvoří kopii zadaného řetězce. Nejprve je zjištěna jeho velikost, poté se funkcí malloc přidělí dostatečně velký prostor, do kterého se řetězec okopíruje, a nakonec se vrátí adresa nové kopie řetězce. Po zavolání této funkce je programátor zodpovědný za uvolnění přiděleného prostoru v okamžiku, kdy se kopie řetězce již nebude dále používat.

char* strdup(const char* s)
{
   int len = strlen(s);
   char* new_s = (char*)malloc(len+1);
   strcpy(new_s, s);
   return new_s;
}

Manuální správa paměti přenechává veškerou zodpovědnost za správné uvolňování paměti na programátorovi, což může vést k obtížně odhalitelným chybám, o nichž jsme se již zmínili dříve. Moderní jazyky se proto orientují častěji na automatickou správu, při které lze těmto chybám předejít - samozřejmě za předpokladu, že je zvolena spolehlivá metoda regenerace paměti.