如何找到malloc分配的字节数

3

I have the following code:

    int size = 0;
void* ptr; 

ptr = malloc(9); //we want to allocate 9 bytes

size = sizeof(*ptr); 
printf("size = %d\n", size);

这会导致大小等于1。有没有办法使大小为9

1
没有通用的方法来找出那个。 - Lee Duhem
前一段时间我在一次面试中被一个相当大的公司问到两个问题:1)如何为X字节分配内存。2)假设你只有一个指向已分配内存的指针,你如何找出分配了多少空间?那是个陷阱问题吗? - fifamaniac04
我不确定,但有可能。 - Lee Duhem
6
这是一个“陷阱问题”吗?有些malloc的实现在返回给程序的内存地址前,会存储一个内存控制块。因此,理论上你可以查看那里以找到已分配块的大小。如果你讨论了每个系统中内存控制块的细节,他们可能会对你印象深刻。但简单地说明程序本身必须跟踪这样的信息才是正确答案。换句话说,这个问题是一个展示你深度知识和经验的机会。 - user3386109
2个回答

4

有没有办法让大小变成9?

没有通用的方法可以找出这个信息。

但是,如果你使用GNU系统(Glibc),你可以使用malloc_usable_size(3)函数。

注意:malloc_usable_size返回的大小可能比相应的malloc给定的大小要大。


1
不行。如果你想记住malloc分配的内存大小,你应该将其存储在其他地方。你也可以使用数组,然后sizeof会给出一个适当的结果...但是如果你使用void *类型,它仍然无法工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接