>proč exit trvá stovky milisekund pro velký proces.
Pokiaľ viem, tak je to preto, lebo
každý malloc zavolá atexit s parametrom free na alokoáciu
A neni to spis proto, ze pri ukonceni procesu a uvolneni stranek, se data v takove strance sanitizuji (smazou/premazou nulama) pro pripad co by kdyby nekdo tu stranku zas alokoval, aby nedoslo k leaknuti dat ?
Nevím, jestli se v posledních letech nepřidal nějaký "paranoid flag", ale jinak se paměť nuluje při alokaci.
I to by šlo dělat asynchronně a nečekat kvůli tomu na ukončení procesu. Ale je fakt, že by to znamenalo buď:
a. Paměť označit za uvolněnou až později, nebo
b. rozlišovat v uvolněné paměti mezi vynulovanou a nevynulovanou, nebo
c. něco nulovat dvakrát.
Já jsem myslel, že jádro na to má thread(y), takže při ukončení procesu ten proces právě může skončit okamžitě a jádro potom maže ty stránky až ten proces je mrtvý.
Jádro má dokonce kompilační volbu pro nemazání stránek, ale to je vhodné jen pro nějaké super embedded účely.
To je záležitosť libc. Kernel toto nezaujíma, on netrackuje alokátor v rámci procesu, on vie iba o pamäti, ktorá patrí procesu získanou cez brk(2).
Priklonil by som sa na stranu predrečníka, nulovanie pamäte veľkému procesu chvíľu trvá.
Je to hezky rozepsane v tom threadu.
tl;dr jede tam desitky mmap()u, ktere se po exit()u dosyncovavaji