为什么Realloc()设计如此糟糕

Why realloc() is so badly designed?

本文关键字:Realloc 为什么      更新时间:2023-10-16

书籍" C 编码标准101规则,准则和最佳实践" 由Herb Sutter&Andrei Alexandrescu项目5说

给出一个实体一个粘性责任。

一次关注一件事:更喜欢给出每个实体(变量, 类,功能,名称空间,模块,库)一个明确的 责任。随着实体的发展,其责任范围 自然会增加,但其责任不应分歧

这本书还提供了C的realloc()函数的示例。

在标准C中,Realloc是不良设计的臭名昭著的例子。它必须做太多的事情:分配内存,如果通过null,请释放它 通过零大小,如果可以的话,将其重新分配到位,或移动内存 如果不能的话。它不容易扩展。它被广泛查看 作为短视设计故障。

是的,realloc()也可以用来处理我们所知道的记忆。也请参见。

,但我的问题是:

1)为什么设计不良?为什么它的设计不仅仅是单个任务?

2)为什么不扩展?

谢谢

  1. 因为检查是否可以分配内存,然后实际分配,它涉及一些常见步骤,如果需要重新验证(从而减慢),如果单独完成。

    此外,将自由操作与分配操作相结合不仅可以更快,而且还可以允许分配内存,否则可能在单独的,连续的位置可能无法使用。

    (想象一下分配768 MB的内存,然后在1.5 GB机器上要求1 GB ...)

  2. 因为它是针对C而不是C 的。