Tak, to się uwolni.
Można to sprawdzić za pomocą:
function a() {
$var = "Hello World";
$content = "";
for ($i = 0; $i < 10000; $i++) {
$content .= $var;
}
print '<br>$content size:'.strlen($content);
print '<br>memory in function:'.memory_get_usage();
return null;
}
print '<br>memory before function:'.memory_get_usage();
a();
print '<br>memory after function:'.memory_get_usage();
wyjściowa:
memory before function:273312
$content size:110000
memory in function:383520
memory after function:273352
Przed funkcja PHP stosowane 273312 bajtów.
Zanim funkcja została zakończona, ponownie sprawdziliśmy zużycie pamięci i użyto 383520.
Sprawdziliśmy rozmiar zawartości $, która wynosi 110000 bajtów.
273312 + 110000 = 383312
Pozostałe 208 bajty są od innych zmiennych (my tylko liczone $ content)
Po funkcja została zakończona sprawdziliśmy zużycie pamięci ponownie i to z powrotem do (prawie (różnica 40 bajtów)) tak samo jak było wcześniej.
Różnica 40 bajtów prawdopodobnie będzie deklaracjami funkcji i deklaracją pętli for.
* sprawnie * - nie można pytać w ten sposób. To, co myślisz, że * efektywnie * może być czymś innym (najprawdopodobniej ze względu na twój styl zadawania BTW), co faktycznie ** jest ** efektywnie * w PHP. – hakre
cóż, zrób to tak szybko, jak to oczywiste, że zmienna nie będzie już używana. –
Jeszcze wcześniej. Po zakończeniu funkcji wszystkie lokalne * zmienne * zniknęły. Nie ma znaczenia, czy dane pozostają (chwilowo) w pamięci czy nie. Ale żeby wiedzieć, że musisz wiedzieć trochę więcej o zarządzaniu pamięcią, co chyba nie jest twoją siłą (proszę nie obrażać).Byłoby zbyt drogie, aby de-alokować bloki pamięci z systemu od razu, tylko dlatego, że zmienna lokalna nie jest już używana. – hakre