为什么Realloc()设计如此糟糕
Why realloc() is so badly designed?
书籍" C 编码标准101规则,准则和最佳实践" 由Herb Sutter&Andrei Alexandrescu项目5说
给出一个实体一个粘性责任。
一次关注一件事:更喜欢给出每个实体(变量, 类,功能,名称空间,模块,库)一个明确的 责任。随着实体的发展,其责任范围 自然会增加,但其责任不应分歧
这本书还提供了C的realloc()函数的示例。
在标准C中,Realloc是不良设计的臭名昭著的例子。它必须做太多的事情:分配内存,如果通过null,请释放它 通过零大小,如果可以的话,将其重新分配到位,或移动内存 如果不能的话。它不容易扩展。它被广泛查看 作为短视设计故障。
是的,realloc()也可以用来处理我们所知道的记忆。也请参见。
,但我的问题是:
1)为什么设计不良?为什么它的设计不仅仅是单个任务?
2)为什么不扩展?
谢谢
-
因为检查是否可以分配内存,然后实际分配,它涉及一些常见步骤,如果需要重新验证(从而减慢),如果单独完成。
此外,将自由操作与分配操作相结合不仅可以更快,而且还可以允许分配内存,否则可能在单独的,连续的位置可能无法使用。
(想象一下分配768 MB的内存,然后在1.5 GB机器上要求1 GB ...) -
因为它是针对C而不是C 的。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- 为什么 Serial.println(<char[]>);返回随机字符?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 为什么不;名字在地图上是按顺序排列的吗
- 我的字符计数代码计算错误.为什么
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我得到 realloc() 无效的旧大小
- 为什么在realloc之后字符串在内存中变得无效
- 为什么Realloc()设计如此糟糕
- 为什么realloc()在为C++编译时表现出神秘的不同
- 可以realloc数组,那么为什么要使用指针