Zajímala by mě jedna věc. Zkoušel jsem s mallocem experimentovat.
Spustil jsem program A, který alokoval 70% veškeré paměti počítače (RAM + SWAP).
Spustil jsem program B, který si též alokoval 70% paměti. Poté oba dva programy začaly přidělenou paměť přepisovat, čímž se začala paměť fyzicky zaplňovat.
Po chvíli swapování jako blázen se jádro OS naštvalo, protože mu došla paměť, došlo k tzv. deadlocku. To Linux vyřešil zabitím jednoho z programů.
A já se ptám: Jak je možné, že korektně napsaný program je odstřelen, i když obsahuje test, dostal-li přidělenou paměť?
Deadlock je teda podle mě něco jinýho (když si dva nebo více procesů čeká navzájem na zámky).
Ale jinak je to proto, že Linux používá optimistickou strategii alokace -- fyzické stránky se přidělují, až je to skutečně potřeba. Předpokládá se, že když doje paměť, tak je něco tak špatně, že už je putna, jestli se něco zabije.
Bylo by možné používat pesimistickou alokační strategii, která tomuto problému zamezuje, ale v praxi by to znamenalo dost velké plýtvání pamětí.
OT: oprava: zaokrouhluje to na *násobky* osmi, ne na dělitele osmi (dělitelé osmi jsou v přirozených číslech 1, 2, 4 a 8).