C 中的自由存储与堆:实际区别
执行动态内存分配,一种在运行时分配内存的技术使用 new/delete 或 malloc/free 函数。虽然人们经常提到 new/delete 在“自由存储”上运行,而 malloc/free 使用“堆”,但问题出现了:这些术语在实践中真的有不同吗?
编译器区别
当谈到 C 时,“自由存储”和“堆”之间的区别很大程度上是概念性的。编译器通常不会对这两个术语进行任何技术区分。这与底层函数(new/malloc 和 delete/free)形成鲜明对比,它们的实现是明确的。
独立的内存空间?
是否“free- “存储”和“堆”驻留在不同的内存空间中,具体取决于编译器的实现。一些编译器可能会为每个编译器分配不同的内存段,而其他编译器可能会使用单个池。然而,这种隔离并不是语言本身所固有的。
最佳实践
尽管它们的内存使用可能存在重叠,但遵守既定的规则仍然至关重要C 中的约定。处理类对象时始终一起使用 new 和 delete ,处理原始内存时同样使用 malloc 和 free 。这样可以确保分配的内存得到正确释放,防止内存泄漏等问题。
总结
而C中的“自由存储”和“堆”的概念有了历史基础,其现实意义就减弱了。在现代编译器中,new/delete 和 malloc/free 都从同一底层池分配内存,具体取决于特定的实现细节。然而,保持这两种分配方法之间的区别对于代码正确性和遵守既定实践仍然很重要。
以上是C 中的自由存储与堆:它们在实践中真的有不同吗?的详细内容。更多信息请关注PHP中文网其他相关文章!