为什么realloc()的设计如此糟糕?

时间:2015-05-03 18:47:47

标签: c++ c coding-style realloc

本书" C ++编码标准101规则,指南和最佳实践" 由Herb Sutter& Andrei Alexandrescu第5项说

赋予一个实体一致的责任。

  

一次关注一件事:更喜欢给每个实体(变量,   类,函数,命名空间,模块,库)一个定义明确的   责任。随着实体的增长,其责任范围   自然增加,但它的责任不应该分歧

本书还给出了C&#39的realloc()函数的例子。

  

在标准C中,realloc是糟糕设计的臭名昭着的例子。它必须做太多事情:如果传递NULL则分配内存,如果是,则释放它   传递零大小,如果可以,将其重新分配到位,或移动内存   如果它不能。它不容易扩展。人们普遍认为   作为一种短视的设计失败。

是的,如我们所知,realloc()也可用于释放内存。另见this

但我的问题是:

1)为什么它的设计很糟糕?为什么它的设计不仅仅是单一任务?

2)为什么它不可扩展?

由于

1 个答案:

答案 0 :(得分:3)

  1. 因为检查是否可以分配内存然后实际分配它涉及一些需要重新采用的常见步骤(因此更慢)单独完成。

    此外,将自由操作与分配操作相结合不仅可以更快,而且还可以允许分配内存,否则可能无法在单独的连续位置使用。
    (想象一下,分配768 MB的内存,然后在1.5 GB的机器上要求1 GB ......)

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