ckd_alloc.h
来自「CMU大名鼎鼎的SPHINX-3大词汇量连续语音识别系统」· C头文件 代码 · 共 229 行
H
229 行
/* ==================================================================== * Copyright (c) 1999-2004 Carnegie Mellon University. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * This work was supported in part by funding from the Defense Advanced * Research Projects Agency and the National Science Foundation of the * United States of America, and the CMU Sphinx Speech Consortium. * * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ==================================================================== * *//* * ckd_alloc.h -- Memory allocation package. * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1999 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * * 19-Jun-97 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * Removed file,line arguments from free functions. * * 01-Jan-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * Created. *//********************************************************************* * * $Header: /cvsroot/cmusphinx/sphinx3/src/libutil/ckd_alloc.h,v 1.9 2004/12/05 18:31:15 arthchan2003 Exp $ * * Carnegie Mellon ARPA Speech Group * * Copyright (c) 1994 Carnegie Mellon University. * All rights reserved. * ********************************************************************* * * file: ckd_alloc.h * * traceability: * * description: * * author: * *********************************************************************/#ifndef _LIBUTIL_CKD_ALLOC_H_#define _LIBUTIL_CKD_ALLOC_H_#include <stdlib.h>#include "prim_type.h" /** \file ckd_alloc.h *\brief Sphinx's memory allocation/deallocation routines. * *Implementation of efficient memory allocation deallocation for *multiple dimensional arrays. * */#ifdef __cplusplusextern "C" {#endif /** * The following functions are similar to the malloc family, except that they have * two additional parameters, caller_file and caller_line, for error reporting. * All functions print a diagnostic message and exit if any error occurs. */void *__ckd_calloc__(size_t n_elem, size_t elem_size, const char *caller_file, int caller_line);void *__ckd_malloc__(size_t size, const char *caller_file, int caller_line);void *__ckd_realloc__(void *ptr, size_t new_size, const char *caller_file, int caller_line); /** * Like strdup, except that if an error occurs it prints a diagnostic message * and exits. */char *__ckd_salloc__(const char *origstr, const char *caller_file, int32 caller_line); /** * Allocate a 2-D array and return ptr to it (ie, ptr to vector of ptrs). * The data area is allocated in one block so it can also be treated as a 1-D array. */void **__ckd_calloc_2d__(int32 d1, int32 d2, /* In: #elements in the 2 dimensions */ int32 elemsize, /* In: Size (#bytes) of each element */ const char *caller_file, int32 caller_line); /* In */ /** * Allocate a 3-D array and return ptr to it. * The data area is allocated in one block so it can also be treated as a 1-D array. */void ***__ckd_calloc_3d__(int32 d1, int32 d2, int32 d3, /* In: #elems in the dims */ int32 elemsize, /* In: Size (#bytes) per element */ const char *caller_file, int32 caller_line); /* In */ /** Test and free a 1-D array */void ckd_free(void *ptr); /** Free a 2-D array (ptr) previously allocated by ckd_calloc_2d */void ckd_free_2d(void **ptr); /** Free a 3-D array (ptr) previously allocated by ckd_calloc_3d */void ckd_free_3d(void ***ptr); /** * Macros to simplify the use of above functions. * One should use these, rather than target functions directly. */ /** * Macro for __ckd_calloc__ */#define ckd_calloc(n,sz) __ckd_calloc__((n),(sz),__FILE__,__LINE__) /** * Macro for __ckd_malloc__ */#define ckd_malloc(sz) __ckd_malloc__((sz),__FILE__,__LINE__) /** * Macro for __ckd_realloc__ */#define ckd_realloc(ptr,sz) __ckd_realloc__(ptr,(sz),__FILE__,__LINE__) /** * Macro for __ckd_salloc__ */#define ckd_salloc(ptr) __ckd_salloc__(ptr,__FILE__,__LINE__) /** * Macro for __ckd_calloc_2d__ */#define ckd_calloc_2d(d1,d2,sz) __ckd_calloc_2d__((d1),(d2),(sz),__FILE__,__LINE__) /** * Macro for __ckd_calloc_3d__ */#define ckd_calloc_3d(d1,d2,d3,sz) __ckd_calloc_3d__((d1),(d2),(d3),(sz),__FILE__,__LINE__)/*#define ckd_free(ptr) free(ptr)*/ /** * Functions for managing graph elements without wasting memory. * Allocate and return an element of size elemsize. elemsize must be a multiple of * a pointer size. The allocated element is not zeroed, unlike calloc. * The function internally allocates a block that can accommodate several such elements, * anticipating future allocation requests. */char *__mymalloc__ (int32 elemsize, char *file, int32 line); /** * Free a graph element (of given size) that was previously allocated using mymalloc. * The element is not really freed; it is returned to an internally maintained * freelist pool. */void __myfree__ (char *elem, int32 elemsize, char *file, int32 line); /** * Macros to simplify the use of __mymalloc__ and __myfree__. One should use these, rather * than target functions directly. * For debugging purposes one can redefine the following to malloc() and free(). */ /** * Macro for mymalloc */#define mymalloc(sz) __mymalloc__((sz),__FILE__,__LINE__) /** * Macro for myfree */#define myfree(ptr,sz) __myfree__(ptr,(sz),__FILE__,__LINE__)#ifdef __cplusplus}#endif#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?