Memory.

php.internals

Vegard Munthe

23 years ago
I've asked these questions a number of other places. It seems no-one really knows. So, even if this might not be the right list for these questions, I hope someone can bare with me and help answer a few questions, or direct me to someone or some doc that can. Questions: 1) Since there are no functions to tell the memory usage of variables and objects, is there a way to calculate memory usage of variables and objects? 2) When a script loads different files as includes, does it take from the memory_limit pool of memory? 3) When leaving a function, are variables in the function's scope freed? I.e. is the memory used by a function completely freed for the rest of the script to reuse? 4) Is there any way to free memory used within a script? Does for instance $var = ""; free the memory previously used by $var? 5) Is it not aa good idea to use objects if you plan to collect thousends of them in PHP? Do they for some reason take up substantially more memory than other variables? Thank you for any answers, or help in finding the right people to ask. -- Vego

Derick Rethans

23 years ago
On Mon, 21 Apr 2003, Vegard Munthe wrote:
> I've asked these questions a number of other places. It seems no-one > really knows. So, even if this might not be the right list for these > questions, I hope someone can bare with me and help answer a few > questions, or direct me to someone or some doc that can. > > Questions: > > 1) Since there are no functions to tell the memory usage of variables and > objects, is there a way to calculate memory usage of variables and > objects?
No, there is none. But there will be a function to show the total memory usage in PHP 5 : memory_get_usage().
> > 2) When a script loads different files as includes, does it take from the > memory_limit pool of memory?
Yes
> > 3) When leaving a function, are variables in the function's scope > freed? I.e. is the memory used by a function completely freed for > the rest of the script to reuse?
It's returned for the rest of the script to reuse, BUT there will always be an allocated pool that will not be freed.
> > 4) Is there any way to free memory used within a script? Does for > instance $var = ""; free the memory previously used by $var?
Only a bit, doing $var = NULL will free the string contents, but not the variable container itself.
> > 5) Is it not aa good idea to use objects if you plan to collect thousends > of them in PHP? Do they for some reason take up substantially more > memory than other variables?
They do use quite a lot more memory then arrays, it just depends a little on how they are distributed, and which variables you see in mind for the relacement of objects. As a final word you might want to checkout Xdebug (http://xdebug.derickrethans.nl) which has a trace function (xdebug_start_trace and xdebug_dump_function_trace) to see how much memory a script uses per function call. (You will need to compile PHP with the --enable-memory-limit option for this to work though). Derick
-- "my other box is your windows PC" ------------------------------------------------------------------------- Derick Rethans http://derickrethans.nl/ PHP Magazine - PHP Magazine for Professionals http://php-mag.net/ -------------------------------------------------------------------------

Andrey Hristov

23 years ago
> On Mon, 21 Apr 2003, Vegard Munthe wrote: > > > I've asked these questions a number of other places. It seems no-one > > really knows. So, even if this might not be the right list for these > > questions, I hope someone can bare with me and help answer a few > > questions, or direct me to someone or some doc that can. > > > > Questions: > > > > 1) Since there are no functions to tell the memory usage of variables
and
> > objects, is there a way to calculate memory usage of variables and > > objects? > > No, there is none. But there will be a function to show the total memory > usage in PHP 5 : memory_get_usage(). >
As far as I can remember after that 28 trip by bus I backported memory_get_usage() from HEAD to the branch. So it will be available in 4.3.2 . Andrey