如何通过调用malloc()来分配多少空间?

kod*_*dai 8 c malloc memory-management

我正在尝试编写像这样的大小函数:

size(void *p,int size);
Run Code Online (Sandbox Code Playgroud)

这将返回p指向的数组的大小.例如:

Int *a = malloc((sizeof(int)*100));
size(a,sizeof(int)); // this should return 100
Run Code Online (Sandbox Code Playgroud)

我认为这是可能的,因为如果我记得,malloc会跟踪在某些头字节中分配的空间.

这是我到目前为止所拥有的:

int size(void *p, int size)
{
  p = (unsigned int *)p - 1;
  unsigned int elements = (*(unsigned int *)p);
  return elements/size;
}
Run Code Online (Sandbox Code Playgroud)

现在,假设分配的空间大小在指针之前的4个字节中,这应该返回字节或偏移量.这就是我在黑暗中的地方.我无法弄清楚malloc如何格式化这些头字节的细节.malloc如何打包标题位?

谢谢,我很感激.我确定这段代码有问题,而且它不是特别便携,可能与系统有关,但我这样做很有趣.

rus*_*lik 6

在Visual Studio中,您可以使用_msize().


Pet*_* G. 6

如果你喜欢偷看并探索你的malloc()返回的内存,我建议你获取你的分配器的源代码.这比实验更快更安全.;-)