Skip to main content
gamedev.net
🔒 Locked

Detecting allocated bytes using a void pointer

Started by Triad_prague Dec 1, 2011 at 12:51 AM 2 replies 1.2k views
Original Post
Triad_prague
Triad_prague
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...
SiCrane
SiCrane
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.
Hodgman
Hodgman
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;
}
Triad_prague
Triad_prague
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!!!
the hardest part is the beginning...

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.