被调用者分配被调用者释放
Posted
技术标签:
【中文标题】被调用者分配被调用者释放【英文标题】:callee allocates callee frees 【发布时间】:2015-04-17 23:26:08 【问题描述】:在“C 和 C++ 中的安全编码”一书中,作者提到了跨项目管理字符串的三种不同方法。
调用者分配,调用者释放(C99、OpenBSD、C11 Annex K)
被调用者分配,调用者释放(ISO/IEC TR 24731-2)
被调用者分配,被调用者释放(C++ std::basic_string
)
然后他提到,“第三种内存管理模式,其中被调用方分配和释放存储,是三种解决方案中最安全的,但仅在 C++ 中可用。”
为什么第三种模式最安全?
【问题讨论】:
“调用者”和“被调用者”与“跨项目”有何关系? 这听起来很简单,并不是一个好的建议。 此外,C 和 C++ 是非常不同的语言和习语,对其中一种有意义,对另一种则没有意义。出于这个问题的目的,您可能应该选择一种您感兴趣的语言。 【参考方案1】:首先,关于第三种方法仅在 C++ 中可用的说法是无稽之谈。 这三种方法在 C 和 C++ 中都是可能的。
关于“安全”部分,这取决于你在做什么。如果您正在编写一个自包含的字符串类(例如std::basic_string
),那么第三种方法可能是最好的,因为该类完全自我管理它自己的内存。
依赖于 main(或任何其他外部部分)中的内存分配/删除的字符串类会导致在使用字符串时忘记必要的分配。 (=错误的高概率)
【讨论】:
以上是关于被调用者分配被调用者释放的主要内容,如果未能解决你的问题,请参考以下文章