在四处搜索分配(通过类似malloc
的东西(后的解除分配(通过free
(是如何工作的之后,我感到困惑。
据了解,当内存被分配时,它实际上多分配了一个字,用来存储分配的大小。这就是free
用来解除分配内存的方法。但随着这些信息的出现,我在任何地方都找不到答案的另一个问题是:如果分配的内存大小存储在某个地方,为什么C中没有一个函数或方法可以给我们通过malloc
之类的东西分配的内存的大小?
C标准只指定分配和释放内存所需的函数。这意味着如何管理堆是系统上标准库的实现细节。Linux的实现方式可能与微软的实现方式大不相同。
也就是说,有时这些实现会公开额外的函数,这些函数会公开堆的内部状态。例如,Linux有一个名为malloc_usable_size
的函数,它传递一个指向已分配内存的指针,并返回可以在该地址写入的字节数。
不过,最好不要依赖于这样的系统特定功能。你的程序应该有一些方法来跟踪一个malloc’ed内存块指向的空间