为什么 realloc() 设计得如此糟糕?
Why realloc() is so badly designed?
Herb Sutter 和 Andrei Alexandrescu 的书 "C++ coding standards 101 Rules,Guidelines, and Best Practices" 第 5 项说
赋予一个实体一项凝聚力责任。
Focus on one thing at a time: Prefer to give each entity (variable,
class, function,namespace, module, library) one well-defined
responsibility. As an entity grows, its scope of responsibility
naturally increases,but its responsibility should not diverge
书中还给出了 C 的 realloc() 函数的例子。
In Standard C, realloc is an infamous example of bad design. It has to do too many things: allocate memory if passed NULL, free it if
passed a zero size, reallocate it in place if it can, or move memory
around if it cannot. It is not easily extensible. It is widely viewed
as a short-sighted design failure.
是的,正如我们所知,realloc() 也可用于释放内存。另见 this。
但我的问题是:
1)为什么设计的不好?为什么它设计用于执行多个任务?
2) 为什么它不可扩展?
谢谢
因为检查是否可以分配内存然后实际分配它涉及一些需要的常见步骤如果单独完成,将被重新拍摄(因此速度较慢)。
此外,将释放操作与分配操作结合起来不仅速度更快,而且还可以分配内存,否则这些内存可能无法在单独的连续位置使用。
(想象一下分配 768 MB 内存,然后在 1.5 GB 的机器上要求 1 GB...)
因为它是为 C 而不是 C++ 而设计的。
Herb Sutter 和 Andrei Alexandrescu 的书 "C++ coding standards 101 Rules,Guidelines, and Best Practices" 第 5 项说
赋予一个实体一项凝聚力责任。
Focus on one thing at a time: Prefer to give each entity (variable, class, function,namespace, module, library) one well-defined responsibility. As an entity grows, its scope of responsibility naturally increases,but its responsibility should not diverge
书中还给出了 C 的 realloc() 函数的例子。
In Standard C, realloc is an infamous example of bad design. It has to do too many things: allocate memory if passed NULL, free it if passed a zero size, reallocate it in place if it can, or move memory around if it cannot. It is not easily extensible. It is widely viewed as a short-sighted design failure.
是的,正如我们所知,realloc() 也可用于释放内存。另见 this。
但我的问题是:
1)为什么设计的不好?为什么它设计用于执行多个任务?
2) 为什么它不可扩展?
谢谢
因为检查是否可以分配内存然后实际分配它涉及一些需要的常见步骤如果单独完成,将被重新拍摄(因此速度较慢)。
此外,将释放操作与分配操作结合起来不仅速度更快,而且还可以分配内存,否则这些内存可能无法在单独的连续位置使用。
(想象一下分配 768 MB 内存,然后在 1.5 GB 的机器上要求 1 GB...)因为它是为 C 而不是 C++ 而设计的。