/* * Copyright (C) 2001-2003 FhG Fokus * * This file is part of sip-router, a free SIP server. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * History: * -------- * 2003-05-21 on sparc64 roundto 8 even in debugging mode (so malloc'ed * long longs will be 64 bit aligned) (andrei) * 2004-07-19 support for 64 bit (2^64 mem. block) and more info * for the future de-fragmentation support (andrei) * 2004-11-10 support for > 4Gb mem. (switched to long) (andrei) */ /** * \file * \brief Simple & fast malloc library * \ingroup mem */ #if !defined(q_malloc_h) && !defined(F_MALLOC) #define q_malloc_h #include "meminfo.h" /* defs*/ #ifdef DBG_QM_MALLOC #if defined(__CPU_sparc64) || defined(__CPU_sparc) /* tricky, on sun in 32 bits mode long long must be 64 bits aligned * but long can be 32 bits aligned => malloc should return long long * aligned memory */ #define ROUNDTO sizeof(long long) #else #define ROUNDTO sizeof(void*) /* minimum possible ROUNDTO ->heavy debugging*/ #endif #else /* DBG_QM_MALLOC */ #define ROUNDTO 16UL /* size we round to, must be = 2^n and also sizeof(qm_frag)+sizeof(qm_frag_end) must be multiple of ROUNDTO! */ #endif #define MIN_FRAG_SIZE ROUNDTO #define QM_MALLOC_OPTIMIZE_FACTOR 14UL /*used below */ #define QM_MALLOC_OPTIMIZE ((unsigned long)(1UL<