php geheugengebruik

Het lijkt erop dat het in PHP ongeveer 213 bytes kost om één geheel getal op te slaan, is het waar? Oké, kijk eens naar de volgende code:

$N = 10000;
echo memory_get_usage()."\n";
$v = array();
for($i = 0; $i < $N; $i++) {
    $v[] = $i;
}
echo memory_get_usage()."\n";
unset($v);
echo memory_get_usage()."\n";

Output is de volgende:

641784
2773768
642056

Het verschil is dus 2773768 - 641784 = 2131984 byte of 213 byte per geheel getal. waarom zo veel? 4 bytes is meer dan genoeg.

1

1 antwoord

4 bytes is alleen voldoende als u ergens in het geheugen een geheel getal opslaat, zonder rekening te houden met het feit dat het een variabele is die een datatype-identificatie nodig heeft, vlaggen om aan te geven of er andere verwijzingen naar die variabele zijn, de naam van die variabele, etc. die allemaal extra geheugen vereisen.

PHP slaat de waarde op in een zval * dus er zijn alle extra bytes die worden gebruikt om de zval-details op te slaan naast de werkelijke waarde.

3
toegevoegd
Merk ook op dat 4-bytes voor een gehele waarde correct is voor 32-bits PHP, als je 64-bits gebruikt dan is het 8-bytes
toegevoegd de auteur Mark Baker, de bron
Merk ook op dat u een array aanmaakt, die ook een zval-structuur heeft, en de hashmap die hoort bij het toewijzen van die array aan de waarden die het bevat, heeft ook een geheugenoverhead
toegevoegd de auteur Mark Baker, de bron