Visual Studio 2010 C ++:获取由malloc分配的内存块的大小

问题描述 投票:5回答:4

给定一个指向用malloc分配的内存块的指针,我如何得到它的大小?

例如:

void* ptr = malloc( 10 ); //Allocate 10 bytes
printf( "%d", GetMemSize( ptr ) ); //Should print 10

我想这样做是出于调试目的。

c++ windows visual-studio memory-management
4个回答
8
投票

在Visual C ++中,您可以使用_msize()


3
投票

Microsoft CRT具有功能_msize(),它将为您提供分配的块的大小。请注意,由于堆管理器管理内存的方式,此大小可能(实际上可能)大于所要求的大小。

这是特定于实现的,如其他答案中所述。


0
投票

只有知道具体实现方式后,您才能获取大小。我不得不像size_t _msize(void *memblock);中那样跟踪内存并编写自己的包装器。因此,正如大卫·赫弗南(David Heffernan)所说,您必须记住包装盒中的尺寸,如我所愿]


0
投票

由于this question的实现是特定于系统和体系结构的,因此没有通用(标准化)的方法。唯一保证的行为是malloc将至少返回N个字节或NULL。 malloc(N)总是分配比要求更多的内存-存储要求的大小(N),通常还存储一些其他簿记数据。

© www.soinside.com 2019 - 2024. All rights reserved.