Marco, se ne è parlato molto circa un anno fa quando il problema era quelo di inserire nell’arte esempi e documentazione per l’uso di pgfplots.
Il problema è che nessun programma deve usare tutta la memoria disponibile; o meglio, bisogna definire che cosa è disponibile. Per i calcolatori di una volta, assolutamente NON multitasking, si riuscivano a fare cose meravigliose con hard disc piccolisimi rispetto a quelli disponibili oggi e con pochi mega di RAM. Ma il sistema operativo, mella sua semplicità eseguiva solo un programma alla volta, oltre a se stesso, come interfaccia da e verso le periferiche.
Oggi i caolcaltori sono multitasking, quindi anche se hai 4GiB di RAM e 8GiB sull’hard diskdi memoria SWAP, questo può non essere sufficiente e rallentare le centinai di processi in esecuzione in ogni istante. Quindi ogni programma che si rispetti non deve richiedere memoria al sistema operativo fioo al punto in cui si arrestano gli altri processi, compreso il sistema operativo stesso, per mancanza di RAM.
Quindi i programmi tex, pdftex,xetex,luatex,aleph, eccetera, devono essere concepiti in modo tale da stare ben lontani da quei limiti; se guardi la statistica alla fine del file log, ci sono scritte le ampiezza di memoria dedicate dall programma eseguibile per eseguire le varie funzioni che deve svolgere; si tratta quasi sempre di milioni di parole di 4 byte; quindi aree di memoria piuttosto vaste, anche se sono lontane dia miliardi di Byte della RAM e dei tebibyte dei dischi. ma garantiscono la velocità di esecuzione e in paratica anche l’assenza di swapping per gestire la RAM e la memoria virtuale.
Allora, durante la discussione si pgfplots fu detto anche come allargare la memoria per i programmi di TeX Live; non mi ricordo se fu detto anche per MiKTeX, ma si parlava solo di raddoppi di memoria, non di ampliamenti vertiginosi.
Diamine, allora perché TikZ per fare un disegno occupa tanta memoria? perché non la libera appena ha finito? Perché tiene in memoria moltissimi dati per fare un diagramma, e non li usa finché non ce li ha tutti a disposizione; ma quando ce li ha a disposizione esegue il disegno, ma non lo scarica dalla memoria, bensì lo mette nella coda degli oggetti flottanti; solo quando la routine di output dell’interprete spedisce fuori (tecnicamente Knuth ha usato il verbo to ship out) una pagina composta contenete anche il disegno, solo allora la memoria si scarica, almeno di quello che è stato spedito fuori.
Questo è quello che ho capito io, che non sono un ingegnere informatico, ma uso il calcolatore, programmando anche in linguaggio macchina, da una cinquantina d’anni (cinquanta anni fa programmare in linguaggio macchina era una cosa “normale”; oggi non lo faccio più); ma anche se oggi sono cose poco comuni, quell’apprendistato ha insegnato molto a noi della vecchia guardia; non pretendo di capire tutto quello che fa il calcolatore dietro le quinte, ma credo di averne una idea abbastanza ben approssimata.
Se qualche ing. informatico vuole correggermi e spiegare meglio a tutti noi frequentatori del forum tutta la faccenda, io sono il primo ad essere contento.