> BTW, why do you think "make test" is a bad test of memory allocation
> patterns? What do you propose as a better test?

    make test is synthetic.  My primary use of smart_str involves
    IRCG based application.

> That's very bad news, because actually my test show that about 95% of
> mallocs are for sizes below 100 bytes. But I hope the system malloc has
> some mechanism to deal with it, otherwise we are wasting a real lot of
> memory. Actually, given that tests show 90% of mallocs are for sizes below
> 64 bytes, if what you say is right, PHP's memory footprint is at least
> twice as big as it is meant to be.

    Most applications use smart_str for temporarily creating some
    representation, processing it quickly, and freeing it
    immediately afterwards.  I.e. the overhead in memory
    allocation is not long term.  IRCG is a good example here; it
    can process GB of IRC data using a 6MB shared memory area.

    Did you perform any benchmarks and if so, on which OS?  Did
    you try the same test with disabled memory cache?

> The number 80 was chosen because even if malloc allocates 128 bytes, these
> 128 bytes would be reused using the Zend memory cache. However, if the
> size of the segment does not allow it to be into the Zend memory cache,
> new malloc would be attempted each time. That was the primery rationale
> for the change, not the memory-saving argument, though it is important
> too.

    Most malloc implementations are tuned for the repetitive
    malloc/free pattern of the same size.  For those, using the
    engine's memory cache will not be an advantage, because it
    prevents memory from being reused through ordinary malloc.

> BTW, the number 128 in the code allocated in fact at least 148 bytes, and
> I don't know what malloc implemetation would do of this.

    That's pretty bad indeed.

    - Sascha

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to