[comp.lang.c] determining amoutn of allocated space

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