给定一个指向用malloc分配的内存块的指针,我如何得到它的大小?
例如:
void* ptr = malloc( 10 ); //Allocate 10 bytes
printf( "%d", GetMemSize( ptr ) ); //Should print 10
我想这样做是出于调试目的。
在Visual C ++中,您可以使用_msize()
。
Microsoft CRT具有功能_msize()
,它将为您提供分配的块的大小。请注意,由于堆管理器管理内存的方式,此大小可能(实际上可能)大于所要求的大小。
这是特定于实现的,如其他答案中所述。
只有知道具体实现方式后,您才能获取大小。我不得不像size_t _msize(void *memblock);
中那样跟踪内存并编写自己的包装器。因此,正如大卫·赫弗南(David Heffernan)所说,您必须记住包装盒中的尺寸,如我所愿]
由于this question的实现是特定于系统和体系结构的,因此没有通用(标准化)的方法。唯一保证的行为是malloc
将至少返回N个字节或NULL。 malloc(N)
总是分配比要求更多的内存-存储要求的大小(N),通常还存储一些其他簿记数据。