On Wed, 7 Jan 1998, Gary Barnett wrote:
> #define CREATE(result, type, number) {\
> if (!((result) = (type *) calloc ((number), sizeof(type)))) {\
> log_info("malloc failure");\
> abort();\
> }\
> statistics.mem_alloc+=sizeof(type)*number; }
Syntax seems a bit clumsy. Check http://www.toof.net/~spectrum, and
download SAM to see what sort of memory tracking is offered there. Some
output from the c++ port of SAM:
>> mem alloc
Structure |Size |In use |Prealloc |Freelist |
| |count bytes|count bytes|count bytes|
accounts | 60| 13 780| 0 0| 1 60|
account characters | 32| 65 2080| 0 0| 16 512|
affects | 20| 4449 88980| N/A | 0 0|
aliases | 12| 275 3300| 0 0| 408 4896|
auction objects | 52| 118 6136| 0 0| 0 0|
arena bets | 16| 0 0| 0 0| 0 0|
bounties | 40| 44 1760| 0 0| 0 0|
areas | 160| 102 16320| 0 0| 0 0|
bans | 28| 25 700| 0 0| 0 0|
blacklists | 8| 551 4408| 0 0| 0 0|
CL heads | 40| 44 1760| 0 0| 0 0|
CL nodes | 12| 575 6900| 0 0| 0 0|
[...]
> #define FREE(item) { statistics.mem_alloc-=sizeof(item); free(item); }
in a situation like:
char *something;
CREATE(something, char, 100);
then FREE(something);
sizeof(something) will be sizeof(char*). Which is 4. sizeof is a
compile-time thing. There's no portable way to ask malloc how big this
block memory is.
> 1) What is the correct method of determining the amount of memory
> a particular data structure is using? I don't want to write a routine
> to handle every darn struct in the mud and all the possiblities. I'd
> rather spend my time creating a new feature or finishing a skill.
> How would you do it?
See SAM :)
You could also, store your own memory info:
void *alloc_mem(int size)
{
int *p = calloc(size+sizeof(int),1);
*p = size;
allocated_memory += size;
return p+1;
}
void free_mem(void *ptr)
{
allocated_memory -= *(int*)ptr;
free(ptr);
}
To track stuff better though, you should probably employ totally your own
memory management. See SAM :)
>> mem caller
Allocations:
show_string:2239: 1 allocs of 1 bytes
0 blocks = 0 bytes in use [1]
save_text_entry:819: 1 allocs of 1027 bytes
1 allocs of 1119 bytes
1 allocs of 1127 bytes
0 blocks = 0 bytes in use [data.dsize]
[...]
=============================================================================
Erwin Andreasen Herlev, Denmark <erwin@pip.dknet.dk> UNIX System Programmer
<URL:http://www.abandoned.org/drylock/> <*> (not speaking for) DDE
=============================================================================
+------------------------------------------------------------+
| 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