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

📄 memblk.h

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 H
字号:
/********************************************************************** * File:        memblk.h  (Formerly memblock.h) * Description: Enhanced instrumented memory allocator implemented as a class. * Author:					Ray Smith * Created:					Tue Jan 21 17:13:39 GMT 1992 * * (C) Copyright 1992, Hewlett-Packard Ltd. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. * **********************************************************************/#ifndef           MEMBLK_H#define           MEMBLK_H#include          "varable.h"#define MAXBLOCKS     16         /*max allowed to grab */#define MAX_STRUCTS     20       //no of units maintained#define MAX_CLASSES     24       //max classes of each size#define MAX_FREE_S_BLOCKS 10     //max free list before all freed#define STRUCT_BLOCK_SIZE 2521#define MAX_CHUNK     262144     //max single chunk#define FIRSTSIZE     16384      //size of first block#define LASTSIZE      262144     //biggest size to use#define BIGSIZE       2100000    //size of big blocks#define MAX_BIGCHUNK    20000000 //max chunk of big mem//#define TESTING_BIGSTUFF                                                                                      //define for big tests//#define COUNTING_CLASS_STRUCTURESclass MEMUNION{  public:    union    {      MEMUNION *ptr;             //next chunk      INT32 size;                //chunk size    };    UINT16 owner;                //owner of chunk    UINT16 age;                  //age of chunk};class MEMBLOCK{  public:    MEMUNION * blockstart;       /*start of block */    MEMUNION *blockend;          /*end of block */    MEMUNION *freechunk;         /*next free chunk */    MEMUNION *topchunk;          /*top free chunk */    MEMBLOCK *next;              /*next block in chain */    INT32 upperspace;            /*space above freechunk */    INT32 lowerspace;            /*space below freechunk */    MEMUNION *find_chunk(               //find free chunk                         INT32 count);  //size required};class FREE_CALL{  public:    void *freeer;                //return addr    INT32 count;                 //no of frees    FREE_CALL() {  //constructor      freeer = NULL;      count = 0;    }};class MALLOC_CALL{  public:    void *caller;                //return addr    FREE_CALL *free_list;        //freeer counts    INT32 *counts;               //no of blocks    INT32 free_bits;             //bits in free table    MALLOC_CALL() {  //constructor      caller = NULL;      free_list = NULL;      counts = NULL;      free_bits = 0;    }    void count_freeer(              //check a structure                      void *addr);  //return address    void init_freeers();  //check a structure};class MEM_ALLOCATOR{  public:    INT16 blockcount;            //blocks in use    UINT16 malloc_serial;        //serial allocation    MEMBLOCK *topblock;          //block for permanents    MEMBLOCK *currblock;         //current block    MALLOC_CALL *callers;        //hash table of callers    void *(*malloc) (INT32);     //external allocator    void (*free) (void *);       //external free    INT32 maxsize;               //biggest block    INT32 biggestblock;          //biggest chunk    INT32 totalmem;              //total free memory    INT32 memsize;               //current block size    UINT32 malloc_div_ratio;     //scaling of malloc_serial    UINT32 malloc_minor_serial;  //scaling counter    UINT32 malloc_auto_count;    //counts auto checks    INT32 call_bits;             //size of table    INT32 entries;               //size of table                                 //all memory blocks    MEMBLOCK memblocks[MAXBLOCKS];    void init (                  //initialize      void *(*ext_malloc) (INT32),//external source      void (*ext_free) (void *), //external free      INT32 firstsize,           //size of first block      INT32 lastsize,            //size of last block      INT32 maxchunk);           //biggest request    void *alloc(                //allocator                INT32 size,     //size of chunk                void *caller);  //ptr to caller    void *alloc_p(                //allocator                  INT32 size,     //size of chunk                  void *caller);  //ptr to caller    void dealloc(                //deallocator                 void *ptr,      //mem to free                 void *caller);  //ptr to caller    void check(                     //check chunks               const char *string,  //message               INT8 level);         //amount of checks    void reduce_counts();  //divide by 2    void display_counts();  //count up    MEMBLOCK *new_block(                 //get new big block                        INT32 minsize);  //minimum size    UINT16 hash_caller(              //check a structure                       void *addr);  //return address  private:    void init_callers();  //check a structure    void set_owner(                       //set owner & date                   MEMUNION *chunkstart,  //chunk to set                   void *caller);         //ptr to caller};extern MEM_ALLOCATOR big_mem;extern MEM_ALLOCATOR main_mem;                                 //heads of freelistsextern MEMUNION *free_structs[MAX_STRUCTS];                                 //number issuedextern INT32 structs_in_use[MAX_STRUCTS];                                 //number issuedextern INT32 blocks_in_use[MAX_STRUCTS];                                 //head of block listsextern MEMUNION *struct_blocks[MAX_STRUCTS];extern INT32 owner_counts[MAX_STRUCTS][MAX_CLASSES];extern INT_VAR_H (mem_mallocdepth, 0, "Malloc stack depth to trace");extern INT_VAR_H (mem_mallocbits, 8, "Log 2 of hash table size");extern INT_VAR_H (mem_freedepth, 0, "Free stack dpeth to trace");extern INT_VAR_H (mem_freebits, 8, "Log 2 of hash table size");extern INT_VAR_H (mem_countbuckets, 16, "No of buckets for histogram");extern INT_VAR_H (mem_checkfreq, 0,"Calls to alloc_mem between owner counts");void *trace_caller(             //trace stack                   INT32 depth  //depth to trace                  );INT32 identify_struct_owner(                     //get table index                            INT32 struct_count,  //cell size                            const char *name     //name of type                           );void check_struct(             //check a structure                  INT8 level,  //print control                  INT32 count  //no of bytes                 );void check_structs(            //count in use on structs                   INT8 level  //print control                  );void *new_struct_block();  //allocate memoryvoid old_struct_block(                     //free a structure block                      MEMUNION *deadblock  //block to free                     );#endif

⌨️ 快捷键说明

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