"Frederick Gotham" <fgothamNO@SPAM.com> wrote:
Sabiyur posted:
Hi All,
Is there any way to find out how much memory is allocated for a
given pointer.
#include <cstddef>
int main()
{
int *p;
std::size_t amount_mem = sizeof p;
}
That doesn't work, my dear fellow. It always yields "4",
regardless of WHAT p points to. Why? Because p is a pointer,
and pointers are always 4 bytes on 32-bit comptuers (which
are about 99% of the computers in the world?).
pointer". And on 32-bit computers pointers are allocated 4 bytes of memory.
If you did THIS:
int* p = new int[10];
cout << "Size of array is " << sizeof (*p) << endl;
Will it print 10? No, it prints 4, but this time for a
totally different reason. (*p) isn't an array of 10 ints;
it's the int that p points to! (That is, element 0 of the
dynamically allocated array.) Since ints are 4 bytes on 32-bit
computers, we again get "4".
There's just no way to do it.
Which is why it's better to use std::vector, std::list, or
std::deque for this kind of thing:
std::list<std::string> Names;
Names.push_back("Frederick Gotham");
Names.push_back("Robbie Hatley");
Names.push_back("Sabiyur");
Names.push_back("Ian Collins");
Names.push_back("Howard");
Names.push_back("Goalie_Ca");
cout << Names.size() << " people have responded to this thread" << endl;
Prints "6 people have responded to this thread".
Hi-jack "malloc" and "new" by writing your own. Store all the addresses
in some sort of look-up table.
Spoken like a true C programmer. You sound like my friend Ron,
the firmware guru. :-)
Me, I like standard containers better. You don't have to worry
about memory allocation (and deallocation) that way, and getting
current size is always as easy as "object.size()".
--
Cheers,
Robbie Hatley
Tustin, CA, USA
lonewolfintj at pacbell dot net
(put "[usenet]" in subject to bypass spam filter)
http://home.pacbell.net/earnur/