----- Original Message ----- From: "Derick Rethans" Sent: Thursday, December 09, 2004
> On Thu, 9 Dec 2004, Matt W wrote: > > > Before I describe my issue, I had been wondering how I can tell/estimate > > how much memory PHP will use for arrays? Is there at least a rough formula > > someone can tell me? > > 42 * number of array elements + size of keys + data Thanks Derick. Is that exact or just an estimate? So PHP needs 42 bytes for each array element, OK. For a multi-dimensional array, I assume the "number of elements" is the total from all dimensions added up. e.g. $foo[] = array(123, 456); is 3 elements (1 + 2)? > > This is disappointing, especially being caused by an array that doesn't > > seem too outrageously large (and I'd like to go larger). :-( It's going to > > suck if I can't come up with a way to get it faster... Is there anything > > that would be different on a version newer than 4.3.6, as I didn't try any > > yet? Or if it's some Windows thing, then I don't care as much. > > > Comments, suggestions? > > Make a custom C extension.. I don't know why you needs arrays this > large, but it sounds like a application design flaw. I need arrays this large because it's building a search index, which could have 100s of millions of entries; and I want to buffer many entries in arrays before doing writes... So even these "large" arrays are just working on a small chunk at a time. :-) I was playing with it more today trying to figure out why it was dramatically slowing down while filling the second large array ($foo). Now I understand more what's going own (thanks in part to that memory usage formula), but there's still a couple odd things. (And I realize that having a 40k element array with an 8 element array for each value takes a lot of memory!) Somewhere in the early part of filling the 40k element array, PHP seems to hit a "bump" where something (mem allocation?) takes much more time, and then it fills the array quickly again (e.g. 40k doesn't take much longer to create than 10k, for example). That I can understand I guess (though I always like to know exactly what's happening? :-)). The most puzzling part to me still remains: when I unset() the first large array ($big_arr), why does filling the second array take more than twice as long (5+ seconds vs. 2+)? If a smaller second array is used, it *does* go faster with the first array unset, which is what I'd expect. So why, when it gets to a certain size does having unset the first array make things slower?? :-/ Thanks if anyone has an explanation to help me better understand what's going on internally (especially the unset() thing). Matt -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php