jdb@reef.cis.ufl.edu (Brian K. W. Hook) (01/09/91)
Does anyone know how you can determine the amount of space that a block hs had allocated for it? Brian
mcdaniel@adi.com (Tim McDaniel) (01/09/91)
(My apologies if the original version of this article gets out.) jdb@reef.cis.ufl.edu (Brian K. W. Hook) asks: > Does anyone know how you can determine the amount of space that a block > has had allocated for it? *Dynamically* allocated, I presume? No, nobody knows. ANSI C has no way, and most implementations provide no functions or macros. Any implementation has to be able to find out, but implementations differ, even with the same machine, same operating system, and/or same compiler. Your choices, in decreasing order of desirability: *1* Change the program requirements so you don't have to find it out. *2* Write wrappers my_malloc() and my_free(), which call malloc() and free() and also keep track of the sizes elsewhere. Storing the size in an extra sizeof(double) bytes before the block should work in practice on most systems. A separate list could be guaranteed portable. *3* Get source code for your system, compiler, and standard library, find out how they do it, and do pointer arithmetic to find the size. Someday you'll have to port the program to a system without sources, and you'll be in trouble. Or else they'll change the system, the compiler, or the library, and your program will suddenly and mysteriously stop working -- and if you're lucky, you'll even notice when it breaks. -- Tim McDaniel Applied Dynamics Int'l.; Ann Arbor, Michigan, USA Work phone: +1 313 973 1300 Home phone: +1 313 677 4386 Internet: mcdaniel@adi.com UUCP: {uunet,sharkey}!amara!mcdaniel