On Mon, 1 Dec 2003, Ronald Bultje wrote:
> On Mon, 2003-12-01 at 00:06, Steven M. Schultz wrote:
> >     As a temporary measure you can try editing the compat function
> >     posix_memalign to return an aligned address.  NOTE:  this will result
> >     in a pointer that can NOT be passed to 'free()' - which makes this an
> >     unacceptable solution in the long term (but as an experiment it would
> >     be worth trying).
> 
> Is this function called often? If not, it can be easily worked around by
> creating a linked list of allocated pointers from posix_memalign().
> Then, return (ret + 3) &~ 3. In posix_memalign_free, check the given
> pointer against each value in the list (listval + 3) &~ 3 and free
> listval.

How about this?  It will malloc and free the aligned pointers in constant
time.   It needs only a trivia change to make it work on 64 bit systems.

/* This assumes that pointers must be padded to 32-bit alignment. */
/* align = power of 2 to align on, e.g 0= 8-bits, 1 = 16 bits, 2 = 32 bits */
void *align_malloc(size_t size, int align)
{
    void *p; uintptr_t l;
    if(align<2) align=2;  /* pad to at least 32 bits for the pointer */

    /* allocate a bit of extra space for a pointer and the alignment */
    p = malloc(size+(1<<align)+sizeof(void*)-1);
    if(!p) return NULL;

    /* Align to the boundry required.  Add at least an extra pointer width
       when aligning up. */
    l = (uintptr_t)(p+sizeof(void*)+(1<<align)-1) & ~(uintptr_t)((1<<align)-1);

    /* Store the original pointer (for free) before the now aligned pointer. */
    ((void**)l)[-1] = p;
    return (void*)l;
}   
  
void align_free(void *ptr)
{
    free( ((void**)ptr)[-1] );
}



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
Mjpeg-users mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mjpeg-users

Reply via email to