我想知道使用calloc
在byte
中分配的缓冲区的大小。通过测试在我的机器如下:确定在堆中分配的缓冲区的大小
double *buf = (double *) calloc(5, sizeof(double));
printf("%zu \n", sizeof(buf));
结果是8,甚至当我改变只有一个元素我仍然得到8.我的问题是:
- 这是否意味着我只能乘8 * 5以字节为单位获取缓冲区大小? (我以为
sizeof
将返回40)。 - 如何才能使字节中返回缓冲区大小的宏(要检查的缓冲区可能是
char
,int
,double
或float
)?
任何想法表示赞赏。
释放calloc()调用malloc(),malloc.c是代码超过5322线,所以它不是微不足道的,但是(没有研究)我认为在缓冲区开始之前有一个计数值,这对我来说很有意义,因为free()不知道calloc使用的参数() – Marichyasana
@Marichyasana您的评论isn' t关于[tag:c],它关于* some *(假设的)实现。实现可以自由选择如何存储'free()'工作所需的信息。事实上,只是一个指向下一个块的指针可能更容易做到,当然,你可以实现你自己的替代'malloc()',它也提供了一些'sizeOfChunk()'函数,但是成为该语言的扩展*。而且,顺便说一句,分配块的程序*知道它的大小(它将它传递给分配函数)。 –