Impossibile allocare memoria: cosa sta cercando di dire?

-1

Nei miei primi giorni di programmazione ho spesso usato errori fatali legati alla memoria nel seguente formato:

Fatal error: Allowed memory size of <some big number> bytes exhausted 
(tried to allocate <some small number> bytes) in /path/to/filename.php 
on line <some line number>

Sono un po 'imbarazzato nel dichiarare che anche se ho capito come risolverli e ad adottare misure per evitarli del tutto, non sono ancora abbastanza sicuro di cosa si traduca esattamente in parole semplici.

Ad esempio, se ottengo un messaggio del tipo:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 4000 bytes) 
in ........ on line 34

Allo stato attuale, presumo che affermi che lo script consuma 67108864 byte di dati, ma durante il runtime sono disponibili solo 4000 byte.

  • Ho ragione nella mia ipotesi?
  • In caso contrario, qual è l'interpretazione corretta?
posta asprin 12.06.2014 - 10:14
fonte

2 risposte

2

Il tuo programma ha 67108864 byte (~ 67 MB) disponibili al runtime, tutto ciò che ha riempito. L'allocazione specifica che ha impiegato l'utilizzo totale della memoria da < 67MB a > 67MB era un'allocazione di 4000 byte, che si verificava all'interno dell'espressione alla riga 34.

In sostanza, stai utilizzando troppa memoria, e tutto l'interprete può darti aiuto è l'allocazione specifica che ha spezzato la schiena del cammello. Potrebbe essere stata un'assegnazione di un byte, tutto ciò che conta è che ti ha portato oltre il limite di memoria.

    
risposta data 12.06.2014 - 10:22
fonte
-4

I 67108864 byte sono anche noti come 64 MiB (Mebibyte). Molti software come PHP identificano ancora 64 MB come 64 MiB, questo è un problema storicamente sviluppato.

Oggi definiamo 64.000.000 byte come 64 MB (Megabyte, 64 * 1000 ^ 2) e 67108864 byte come 64 MiB (Mebibyte, 64 * 1024 ^ 2).

    
risposta data 12.06.2014 - 11:01
fonte

Leggi altre domande sui tag