如何在C标准库中实现realloc?

use*_*452 5 c realloc

我找不到该realloc函数的任何源代码,而且似乎破坏了C的基本规则:它不需要花很长时间重新分配内存。

  1. 在不知道原始内存长度的情况下如何重新分配内存?

  2. 我如何自己实现此功能?

lus*_*oog 4

至少有 3 个考虑因素使得realloc完全在“用户区”C 中实现变得困难或不可能。

  1. malloc与使用的相同数据结构进行交互free

  2. mallocrealloc需要返回与任何对象适当对齐的存储。在 C11 之前,我们还没有所有必要的宏来 100% 可移植地计算这种对齐方式。

  3. 有一个棘手的语言法律原因,malloc并且realloc不能在可移植 C 中实现。我可能会混淆这里的术语,但问题是,在函数计算出它将返回的指针值之后,它没有办法放弃“有效类型”已与存储相关联。因此,即使您可以让您的版本正常工作,它实际上也是非标准的。