Mercurial > hg > xemacs-beta
view src/blocktype.c @ 5167:e374ea766cc1
clean up, rearrange allocation statistics code
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-21 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (assert_proper_sizing):
* alloc.c (c_readonly):
* alloc.c (malloced_storage_size):
* alloc.c (fixed_type_block_overhead):
* alloc.c (lisp_object_storage_size):
* alloc.c (inc_lrecord_stats):
* alloc.c (dec_lrecord_stats):
* alloc.c (pluralize_word):
* alloc.c (object_memory_usage_stats):
* alloc.c (Fobject_memory_usage):
* alloc.c (compute_memusage_stats_length):
* alloc.c (disksave_object_finalization_1):
* alloc.c (Fgarbage_collect):
* mc-alloc.c:
* mc-alloc.c (mc_alloced_storage_size):
* mc-alloc.h:
No functionality change here. Collect the allocations-statistics
code that was scattered throughout alloc.c into one place. Add
remaining section headings so that all sections have headings
clearly identifying the start of the section and its purpose.
Expose mc_alloced_storage_size() even when not MEMORY_USAGE_STATS;
this fixes build problems and is related to the export of
lisp_object_storage_size() and malloced_storage_size() when
non-MEMORY_USAGE_STATS in the previous change set.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sun, 21 Mar 2010 04:41:49 -0500 |
parents | fdefd0186b75 |
children | 308d34e9f07d |
line wrap: on
line source
/* Fixed-size block allocator. Copyright (C) 1994 Free Software Foundation, Inc. This file is part of XEmacs. XEmacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. XEmacs 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 for more details. You should have received a copy of the GNU General Public License along with XEmacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Synched up with: Not in FSF. */ /* Authorship: Ben Wing: December 1994, for 19.12. */ /* ------------------------------------------------------------------------------ A "block-type object" is used to efficiently allocate and free blocks of a particular size. Freed blocks are remembered in a free list and are reused as necessary to allocate new blocks, so as to avoid as much as possible making calls to malloc() and free(). This is a container object. Declare a block-type object of a specific type as follows: struct mytype_blocktype { Blocktype_declare (mytype); }; Use the following functions/macros: structype *Blocktype_new(structype) [MACRO] Create a new block-type object of the specified type. The argument to this call should be the type of object to be created, e.g. foobar_blocktype. type *Blocktype_alloc(b) [MACRO] Allocate a block of the proper type for the specified block-type object and return a pointer to it. Blocktype_free(b, block) Free a block of the type corresponding to the specified block-type object. Blocktype_delete(b) Destroy a block-type object and the memory allocated to it. */ /* This file has been Mule-ized. */ #include <config.h> #include "lisp.h" #include "blocktype.h" typedef struct blocktype { Blocktype_declare (void); } Blocktype; struct block_internal { void *next; }; void * Blocktype_newf (Bytecount elsize) { Blocktype *b = xnew (Blocktype); b->elsize = max (elsize, (Bytecount) sizeof (void *)); b->free = 0; return (void *) b; } void Blocktype_allocf (void *bbb) { Blocktype *b = (Blocktype *) bbb; if (b->free) { b->tempel = b->free; b->free = ((struct block_internal *) (b->free))->next; } else b->tempel = (void *) xmalloc (b->elsize); } void Blocktype_free (void *bbb, void *el) { Blocktype *b = (Blocktype *) bbb; ((struct block_internal *) el)->next = b->free; b->free = el; }