midpmalloc.c

来自「This is a resource based on j2me embedde」· C语言 代码 · 共 259 行

C
259
字号
/* * * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. *//** * @file * * MIDP native public memory functions. * * With these functions, we have the ability to manage our own * memory pool. This avoids memory fragmentation in the overall * system. However, it does not address the potential problem * of memory fragmentation within the MIDP application itself. * * The memory pool is one contiguous chunk of memory split up * into various free or allocated blocks. All blocks have the * same layout. * * <table border=1> * <tr><th scope=col>Contents of the Memory Block</th></tr> * <tr><td>magic (value of 0xCAFE)</td></tr> * <tr><td>free (value of 0 or 1)</td></tr> * <tr><td>reserved/<sup>[*]</sup>guardSize</td></tr> * <tr><td>size</td></tr> * <tr><td><sup>[*]</sup>filename</td></tr> * <tr><td><sup>[*]</sup>lineno</td></tr> * <tr><td>1 .. size</td></tr> * <tr><td><sup>[*]</sup>1 .. guardSize</td></tr> * </table> * * <p>Items that have the prefix <sup>[*]</sup> are only enabled if memory * tracing is enabled. * * @warning This code is not thread safe. * * @note  In this midpMalloc implementation we wrap the pcslMemory functions * defined in pcsl_memory.h. */#include <stdio.h>#include <string.h>//#include <malloc.h>#include <midpMalloc.h>#include <midp_logging.h>#include <pcsl_memory.h>#ifdef __cplusplusextern "C" {#endif#if ENABLE_MIDP_MALLOC/** * FUNCTION:      midpInitializeMemory() * TYPE:          public operation * OVERVIEW:      Initialize the MIDP memory pool *                 NOTE: This must only be called once * INTERFACE: *   parameters:  size   Size of memory pool to use; if size is '-1', *                        the default memory pool size will be used *   returns:     0 on success; != 0 on failure * */intmidpInitializeMemory(int size) {    int tmp = size;    tmp++; /* avoid compile warning for unused variable */    return pcsl_mem_initialize(NULL, size);}/** * FUNCTION:      midpFinalizeMemory() * TYPE:          public operation * OVERVIEW:      Finalize the MIDP memory pool * INTERFACE: *   parameters:  <none> *   returns:     <nothing> * */voidmidpFinalizeMemory() {    pcsl_mem_finalize();}/** * FUNCTION:      midpMallocImpl() * TYPE:          public operation * OVERVIEW:      Allocate memory from the private MIDP memory pool * INTERFACE: *   parameters:  size       Number of byte to allocate *                filename   Filename where allocation occurred *                lineno     Line number where allocation occurred *   returns:     pointer to the newly allocated memory * */void*midpMallocImpl(unsigned int size, char* filename, int lineno) {    (void) filename;    (void) lineno;    return pcsl_mem_malloc(size);}/** * FUNCTION:      midpCallocImpl() * TYPE:          public operation * OVERVIEW:      Allocate memory from the private MIDP memory pool, *                 memory contents are cleared * INTERFACE: *   parameters:  nelem      Number of elements to allocate *                elsize     Size of one element *                filename   Filename where allocation occurred *                lineno     Line number where allocation occurred *   returns:     pointer to the newly allocated and cleared memory * */void*midpCallocImpl(unsigned int nelem, unsigned int elsize,               char* filename, int lineno) {    (void) filename;    (void) lineno;    return pcsl_mem_calloc(nelem, elsize);}/** * FUNCTION:      midpReallocImpl() * TYPE:          public operation * OVERVIEW:      Re-allocate memory from the private MIDP memory pool * INTERFACE: *   parameters:  ptr        Original memory pointer *                size       New size *                filename   Filename where allocation occurred *                lineno     Line number where allocation occurred *   returns:     pointer to the re-allocated memory * */void*midpReallocImpl(void* ptr, unsigned int size, char* filename, int lineno) {    (void) filename;    (void) lineno;    return pcsl_mem_realloc(ptr, size);}#ifdef UNDER_CEchar * strdup(const char *s) {    char *result = (char*)malloc(strlen(s)+1);    if (result) {        strcpy(result, s);    }    return result;}#endif/** * FUNCTION:      midpStrdupImpl() * TYPE:          public operation * OVERVIEW:      Duplicate the given string * INTERFACE: *   parameters:  s1         String to duplicate *                filename   Filename where allocation occurred *                lineno     Line number where allocation occurred *   returns:     pointer to the duplicate string * */char*midpStrdupImpl(const char *s1, char* filename, int lineno) {    (void) filename;    (void) lineno;    return (char*)pcsl_mem_strdup(s1);}/** * FUNCTION:      midpFreeImpl() * TYPE:          public operation * OVERVIEW:      Free memory allocated from the private MIDP memory pool * INTERFACE: *   parameters:  ptr        Pointer to allocated memory *                filename   Filename where allocation occurred *                lineno     Line number where allocation occurred *   returns:     <nothing> * */voidmidpFreeImpl(void *ptr, char *filename, int lineno) {    (void) filename;    (void) lineno;    pcsl_mem_free(ptr);}/** * * FUNCTION:      midpGetTotalHeap() * TYPE:          public operation * OVERVIEW:      Get the total amount of available heap * INTERFACE: *   parameters:  <none> *   returns:     The total amount of available heap * */intmidpGetTotalHeap() {    return pcsl_mem_get_total_heap();}/** * FUNCTION:      midpGetFreeHeap() * TYPE:          public operation * OVERVIEW:      Get the current amount of unused heap * INTERFACE: *   parameters:  <none> *   returns:     The current amount of unused heap * */intmidpGetFreeHeap() {    return pcsl_mem_get_free_heap();}/* Set countMemoryLeaksOnly = 0 in order to get more verbose information */int midpMallocDumpMemory(int countMemoryLeaksOnly) {    int tmp = countMemoryLeaksOnly;    tmp++; /* avoid compile warning for unused variable */    return pcsl_mem_malloc_dump(countMemoryLeaksOnly);}#endif  /* ENABLE_MIDP_MALLOC*/#ifdef __cplusplus}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?