⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imalloc.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* $Id: imalloc.c,v 1.9 2002/08/02 19:26:55 adam Exp $   Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002   Index Data ApsThis file is part of the Zebra server.Zebra is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.Zebra is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with Zebra; see the file LICENSE.zebra.  If not, write to theFree Software Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.*/#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <zebrautl.h>#include "imalloc.h"#if MEMDEBUG#define MAG1 0x8fe1#define MAG2 0x91#define MAG3 0xeelong alloc       = 0L;long max_alloc   = 0L;int  alloc_calls = 0;int  free_calls  = 0;#endifvoid *imalloc (size_t size){#if MEMDEBUG    size_t words = (4*sizeof(unsigned) -1 + size)/sizeof(unsigned);    char *p = (char *)xmalloc( words*sizeof(unsigned) );    if( !p )        logf (LOG_FATAL, "No memory: imalloc(%u); c/f %d/%d; %ld/%ld",           size, alloc_calls, free_calls, alloc, max_alloc );    *((unsigned *)p) = size;    ((unsigned *)p)[1] = MAG1;    p += sizeof(unsigned)*2;    size[(unsigned char *) p] = MAG2;    size[(unsigned char *) p+1] = MAG3;    if( (alloc+=size) > max_alloc )        max_alloc = alloc;    ++alloc_calls;    return (void *) p;#else    void *p = (void *)xmalloc( size );    if( !p )        logf (LOG_FATAL, "Out of memory (imalloc)" );    return p;#endif}void *icalloc (size_t size){#if MEMDEBUG    unsigned words = (4*sizeof(unsigned) -1 + size)/sizeof(unsigned);    char *p = (char *) xcalloc( words*sizeof(unsigned), 1 );    if( !p )        logf (LOG_FATAL, "No memory: icalloc(%u); c/f %d/%d; %ld/%ld",           size, alloc_calls, free_calls, alloc, max_alloc );    ((unsigned *)p)[0] = size;    ((unsigned *)p)[1] = MAG1;    p += sizeof(unsigned)*2;    size[(unsigned char *) p] = MAG2;    size[(unsigned char *) p+1] = MAG3;    if( (alloc+=size) > max_alloc )        max_alloc = alloc;    ++alloc_calls;    return (void *)p;#else    void *p = (void *) xcalloc( size, 1 );    if( !p )        logf (LOG_FATAL, "Out of memory (icalloc)" );    return p;#endif}void ifree (void *p){#if MEMDEBUG    size_t size;    if( !p )        return;    ++free_calls;    size = (-2)[(unsigned *) p];    if( (-1)[(unsigned *) p] != MAG1 )        logf (LOG_FATAL,"Internal: ifree(%u) magic 1 corrupted", size );    if( size[(unsigned char *) p] != MAG2 )        logf (LOG_FATAL,"Internal: ifree(%u) magic 2 corrupted", size );    if( (size+1)[(unsigned char *) p] != MAG3 )        logf (LOG_FATAL,"Internal: ifree(%u) magic 3 corrupted", size );    alloc -= size;    if( alloc < 0L )        logf (LOG_FATAL,"Internal: ifree(%u) negative alloc.", size );    xfree( (unsigned *) p-2 );#else    xfree (p);#endif}#if MEMDEBUGvoid imemstat (void){    fprintf( stdout, "imalloc: calls malloc/free %d/%d, ",                                     alloc_calls, free_calls );    if( alloc )        fprintf( stdout, "memory cur/max %ld/%ld : unreleased",                                                          alloc, max_alloc );    else        fprintf( stdout, "memory max %ld", max_alloc );    fputc( '\n', stdout );}#endif

⌨️ 快捷键说明

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