Robert Cummings wrote:

Then how come when I do a foreach on an array (without modifying 
anything within the foreach), it still makes a copy of the array that 
consumes memory? I think it's dangerous to generalize that it's always 
best to let PHP make copies of things. In the foreach situation, the 
preferred solution when memory is a problem is to either use a 
reference, or have foreach iterate over the keys of the array.

Regards, Adam.

-----

PHP doesn't seem to make a real copy of data until one of the copies is
modified, making it necessary to create a new set of data. So, it is pretty
smart about that.

Here is a small CLI script that seems to support this:
<?php
$a_array = array();
for($i = 0; $i < 10000; $i++) {
        $a_array[] = time(); // Just an arbitrary piece of data
}
echo 'Memory Usage: ' . memory_get_usage() . "\n";
echo "Making a copy of the array.\n";
$a_copy = $a_array;
echo 'Memory Usage: ' . memory_get_usage() . "\n";
echo "Modifying the copy:\n";
$a_copy[] = time();
echo 'Memory Usage: ' . memory_get_usage() . "\n";
?>

On my machine, this displays:
Memory Usage: 640280
Making a copy of the array.
Memory Usage: 640440
Modifying the copy:
Memory Usage: 1106056

-K. Bear

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to