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;
}
Detecting allocated bytes using a void pointer
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:
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;
}
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement