: thus on Wed, 7 Jan 1998 21:29:06 -0900, Gary virtually wrote:
> I've reached the point where it's time to start adding
> statistics to the mud to track how resources are being
> used.
> Something like so.
> #define CREATE(result, type, number) {\
> if (!((result) = (type *) calloc ((number), sizeof(type)))) {\
> log_info("malloc failure");\
> abort();\
> }\
> statistics.mem_alloc+=sizeof(type)*number; }
> #define FREE(item) { statistics.mem_alloc-=sizeof(item); free(item); }
Make function wrappers for malloc and free.
inline static void memchk (void *mem)
{
if (mem == NULL) {
fputs ("SYSERR: out of memory\n", stderr);
exit (-1);
}
}
void *my_malloc (size_t size)
{
void *mem;
mem = malloc (size);
memchk (mem);
statistics.mem_alloc += size;
return mem;
}
void *my_calloc (site_t nelem, size_t elsize)
{
void *mem;
size_t size = nelem * elsize;
mem = malloc (size);
memchk (mem);
memset (mem, 0, (size);
statistics.mem_alloc += size;
return mem;
}
void *my_realloc (void *mem, size_t size)
{
statistics.mem_alloc -= sizeof (*mem);
mem = realloc (mem, size);
memchk (mem);
statistics.mem_alloc += sizeof (*mem);
return mem;
}
void my_free (void *mem)
{
#ifdef FREE_IS_BROKEN
if (mem != NULL)
#endif
free (mem);
statistics.mem_alloc -= sizeof (*mem);
}
> As you will no doubt see, the free call is not returning the
> correct amount of memory that will be freed. I deduce this from
> two clues: 1) PS and the memory alloc stat get farther apart in
> value as time passes 2) Creating 200 objs in a room and then purging
> them does not decrease the amount of memory allocated. In fact, it goes
> up..
sizeof (mem) based upon architecture will be constants. On linux it's
always 32 bits, size = 4;
> In particular I can live with REALLOC not being supported.
> How would you do it?
See above.
d.
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST