On Thu, 14 Jun 2001, Luke Kenneth Casson Leighton wrote:

> you are aware that strictly speaking you are _not_ supposed
> to treat memory addresses as contiguous?
>
> one of the reasons why void* _is_ void* is because
> potentially, areas of memory allocated by a system
> may be from different regions, and not contiguous.

Uhh.. well, yeah, of course.  I was speaking strictly about this
particular implementation of apr_sms_blocks, which does its dirty deed by
pre-allocating a single big block (8K I think) and then carving it up into
little sub-blocks which it hands out.  Only if it cannot fulfill the
apr_sms_blocks_malloc() request with one of those sub-blocks will it call
parent->malloc_fn().  So all you have to do in apr_sms_blocks_free() to
find out if the address you were given is one of your sub-blocks or
something else (ie, something you got from parent->malloc_fn()) is to
check if the address is outside your single big block.  If it is outside,
then you MUST have gotten that memory block from your parent.  If it is
inside, then it MUST be one of your sub-blocks.

--Cliff

--------------------------------------------------------------
   Cliff Woolley
   [EMAIL PROTECTED]
   Charlottesville, VA


Reply via email to