lkml.org 
[lkml]   [2004]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] ALSA: Remove subsystem-specific malloc (1/8)
    On Wed, 9 Jun 2004, Pekka Enberg wrote:

    > +void *kcalloc(size_t n, size_t size, int flags)
    > +{
    > + if (n != 0 && size > INT_MAX / n)
    > + return NULL;

    division isn't very efficient :) it's typically a 40+ cycle operation.

    there's almost certainly more efficient ways to do this with per-target
    assembly... but you should probably just crib the code from glibc which
    avoids division for small allocations:

    /* size_t is unsigned so the behavior on overflow is defined. */
    bytes = n * elem_size;
    #define HALF_INTERNAL_SIZE_T \
    (((INTERNAL_SIZE_T) 1) << (8 * sizeof (INTERNAL_SIZE_T) / 2))
    if (__builtin_expect ((n | elem_size) >= HALF_INTERNAL_SIZE_T, 0)) {
    if (elem_size != 0 && bytes / elem_size != n) {
    MALLOC_FAILURE_ACTION;
    return 0;
    }
    }

    -dean
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:03    [W:0.021 / U:0.200 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site