Detecting allocated bytes using a void pointer

Started by
2 comments, last by Triad_prague 12 years, 4 months ago
Hello all, I wonder if there's a way to detect the allocated size of the memory thru the usage of void pointer. It's better explained with the source so here it is:


int main(int argc, char** argv)
{
void* buffer = new char[256];

//can I inspect the memory pointed by 'buffer' and check how many bytes it used)? I know it used 256 bytes but that's cheating. Thanks before

return 0;
}
the hardest part is the beginning...
Advertisement
There's no portable way to do that. There are various compiler dependent methods of getting at this information. This old thread discusses this a bit.
This feature is required by memory allocators, and it's usually achieved through magic/hacks like below:int main(int argc, char** argv)
{
char* buffer;
{
buffer = new char[sizeof(int) + 256];//allocate some extra space
int* size = (int*)buffer;
*size = 256;//write the size at the start of the buffer
buffer = buffer + sizeof(int);//increment the buffer past these extra bytes so the user is unawares that they exist
}

//I can inspect the memory pointed by 'buffer' and check how many bytes it used. I know it used 256 bytes but that's cheating.
int size = *(int*)(buffer - sizeof(int));//size is written directly before the "user allocation"
assert( size == 256 );

delete (buffer - sizeof(int));//this complicates deallocation however...
return 0;
}
Thx SiCrane, Hodgman....that cleared my doubts. Hmm I guess I'll just keep a list of allocated size rather than complicating myself with those hacks. Once again, thanks!!!:lol:
the hardest part is the beginning...

This topic is closed to new replies.

Advertisement