C:揭示自由存储和堆之间的区别
在动态内存分配领域,C 提供了两种主要机制: /delete 和 malloc/free。虽然两者通常都被称为在堆上操作,但这提出了一个问题:术语“自由存储”和“堆”之间是否存在实际区别。
在编译器如何处理这些术语?
答案在于 C 内存管理的演变。从历史上看,“堆”特指由 malloc/free 函数管理的内存区域。然而,随着new和delete操作符的引入,出现了一个单独的“自由存储”概念。这是为了强制两个内存管理系统之间的分离,防止不同分配器的意外混合。
今天,对于 C 来说,自由存储和堆之间的区别在很大程度上已经成为概念性的。 new/delete 和 malloc/free 都从同一个池中分配内存,通常由操作系统管理。然而,用法仍然不同。 new/delete 用于需要构造函数和析构函数的对象,而 malloc/free 则更灵活,用于原始内存分配。
在面试中,通常会强调传统的区别:
但是,面试官也可能承认,现代编译器通常不会严格执行这些区别,可能允许两个运算符访问相同的内存空间。
以上是C 中的自由存储和堆之间有真正的区别吗?的详细内容。更多信息请关注PHP中文网其他相关文章!