【发布时间】:2016-07-21 23:58:43
【问题描述】:
free() 只需要指针值即可释放分配的内存。这意味着 C 知道分配的内存块有多大。那么为什么没有一些内置函数来查找指针数组的大小呢?
我知道惯例是跟踪数组大小,但鉴于本机已经进行了一些内存管理,我们为什么不利用它为数组提供一个方便的 size() 函数?
【问题讨论】:
-
因为没有人设计和提出过这样的功能。我预计会有可实施性问题。但也要考虑不是每个指针都是
malloc的结果,所以你会有一个无法诊断的前提条件。 -
sizeof是一个编译时特性。free是一个运行时函数。 -
该功能由于舍入和细分而几乎没有用处。例如,如果您
malloc(3),大多数实现将返回 1 个 16 字节的块。free函数只知道指针代表 1 块内存。它不记得您要求 3 个字节。另一方面,您可以malloc(1024)然后将该内存用于 4 个每个 256 字节的数组。建议的size()函数无法知道您如何细分内存。 -
@hazrmard:例如:
int array1[10]; int array2[20]; int *ptr = rand() % 2 ? array1 : array2;。除非您自己跟踪它,否则无法知道数组ptr指向多大。你能实现size()以便size(ptr)返回正确的大小吗?