new操作符-gnuc++如何实现new和delete

new operator - how gnu c++ implement new and delete

本文关键字:new 实现 delete 操作符 -gnuc++ 何实现      更新时间:2023-10-16

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

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

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

总之,您的问题的答案是"new/delete call malloc/free and handle expections"。

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

看看这个StackOverflow答案。

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

在此处查找new的描述并删除。

我希望其他人能在你的第三个问题上帮你。

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

重载新的/删除