Ti prego di aiutarmi a capire la relazione tra le dimensioni del file di script e l'utilizzo della memoria?

2

Sto programmando in PHP e ho un file include che devo, beh, includere, come parte del mio script. Il file include è di 400 MB e contiene una serie di oggetti che non sono altro che le impostazioni di configurazione per un progetto più grande. Ecco un esempio dei contenuti:

$obj = new obj();
    $obj->name = "myname";
    ....

$objs[$obj->name] = $obj->name;
{repeat}
....
return $objs;

Questo processo si ripete 40.000 volte e alla fine è lungo 650.000 linee (il file viene generato dinamicamente, ovviamente).

Se sto semplicemente cercando di caricare un file di 400 MB, perché l'utilizzo della memoria dovrebbe aumentare fino a 6 GB? Anche se il file è caricato in memoria, non occuperebbe solo 400 MB di RAM?

    
posta user658182 28.02.2013 - 09:28
fonte

3 risposte

7

Non c'è solo il file. C'è l'albero di analisi che viene generato dall'analisi del file, il bytecode a cui viene compilato, la memoria occupata dalle variabili definite in esso, ecc. 6 GB sembra ancora molto, ma per un file di 650.000 righe non sorprende molto.

Ad un certo punto lungo la strada, qualcuno probabilmente avrebbe pensato di usare un database. :) A meno che tu non stia utilizzando ogni elemento di quel file ogni volta, caricare mezzo milione di file per estrarre alcune cose è incredibilmente dispendioso.

    
risposta data 28.02.2013 - 09:34
fonte
5

La dimensione del file è la dimensione del codice che viene eseguito.

L'utilizzo della memoria è la dimensione del contenuto di tutte le variabili create dall'esecuzione del codice.

Un algoritmo che calcola pi può richiedere meno di 10 righe di codice e necessita di miliardi di byte solo per memorizzare il risultato.

    
risposta data 28.02.2013 - 09:37
fonte
3

Uno script è in genere una dimensione fissa. Viene letto ed eseguito in modo efficace riga per riga. Questa è la dimensione del tuo file.

Mentre lo script è in esecuzione, può dire al computer "memorizza queste informazioni che ho generato per me", e il computer gli dà doverosamente un po 'di memoria. Questa è la tua dimensione della memoria.

Il tuo script può chiedere ripetutamente più e più posti per memorizzare le informazioni che ha generato, spesso memorizzando le stesse cose o cose simili in molti posti diversi. Questo può richiedere molti megabyte e persino gigabyte. La quantità di memoria (in memoria) è quasi totalmente indipendente dalle dimensioni dello script, sebbene lo stesso script utilizzi normalmente lo stesso importo ogni volta che viene eseguito.

    
risposta data 28.02.2013 - 10:22
fonte

Leggi altre domande sui tag