【问题标题】:how gnu c++ implement new and deletegnu c++如何实现new和delete
【发布时间】:2015-07-05 09:55:22
【问题描述】:

我只是在 libstdc++-v3 中看到了一些声明,但找不到定义。 newdelete 是否只是封装 mallocfree ?在哪里可以找到 newdelete 的定义?为什么我找不到 bits/c++allocator.h 包含在 bits/allocator.h 中? gcc中有很多奇怪的东西。

【问题讨论】:

标签: c++ new-operator delete-operator


【解决方案1】:

尽管 C++ 规范声明开发人员应避免使用旧的 malloc/free 方式来分配内存,但 C++ 语言本身对内存分配无能为力。 new/delete 类似于 malloc/free 的包装器,具有 C++ 类型安全特性,并在 malloc 返回 NULL 时抛出期望。这就是为什么“新”从不返回 NULL 而是期望。他们为您完成这项工作。

C++ 使用 glibc、libc 等 C 例程进行系统级操作。在 Linux 中,“实际”分配内存的唯一方法是调用 brk() 和 mmap()。所有语言包括 Java 和 Python 调用 malloc() 或更低级别的 api 来分配内存并在回收“垃圾”时调用 free()。

总而言之,您的问题的答案是“新建/删除调用 malloc/free 并处理期望”。

【讨论】:

  • 你的意思是例外吗?
【解决方案2】:

new和delete只是封装了malloc和free吗?

查看this StackOverflow answer

在哪里可以找到 new 和 delete 的定义?

找到新的描述并删除here

我希望其他人可以帮助您解决第三个问题。

【讨论】:

  • 我刚刚添加了一个评论作为补充。实际上,我想知道 gnu c++ 如何在其源代码中实现 newdelete。很抱歉没有清楚地表达我的问题。
【解决方案3】:

它们是可以重新定义的处理程序。 “malloc”和“free”是该结构的一部分。可以重新定义它们以改进内存管理。

overloading new/delete

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 2012-10-26
    • 2017-12-07
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多