我只看到 libstdc++-v3 中的一些声明,但找不到定义。 new
和 delete
是否只是封装了 malloc
和 free
?在哪里可以找到 new
和 delete
的定义?为什么我找不到 bits/c++allocator.h
包含在 bits/allocator.h
中? gcc 中有很多奇怪的东西。
最佳答案
尽管 C++ 规范指出开发人员应避免使用旧的 malloc/free 方式分配内存,但 C++ 语言本身对内存分配无能为力。 new/delete 的行为类似于具有 C++ 类型安全功能的 malloc/free 的包装器,并在 malloc 返回 NULL 时抛出预期。这就是为什么“new”从不返回 NULL 而是期望。他们为您完成这项工作。
C++ 使用诸如 glibc、libc 之类的 C 例程进行系统级操作。在 Linux 中,“实际”分配内存的唯一方法是调用 brk() 和 mmap()。所有语言包括Java和Python调用malloc()或低级api分配内存并在回收“垃圾”时调用free()。
总而言之,您问题的答案是“new/delete call malloc/free and handle expections”。
关于c++ - gnu c++如何实现new和delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31229121/