new操作符-gnuc++如何实现new和delete
new operator - how gnu c++ implement new and delete
我只是在libstdc++-v3中看到了一些声明,但找不到定义。new
和delete
是否只是封装了malloc
和free
?在哪里可以找到new
和delete
的定义?为什么我不能在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"是该结构的一部分。它们可以重新定义以改进内存管理。
重载新的/删除
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 供应商是否将 new 和 malloc 实现为小型对象分配器
- 如何介入在Eclipse和Linux上实现new()的代码
- 如何重载运算符new来实现类的快速分配器
- 一种按'new'实现分配的方法
- 哪些文件包含malloc()和new()的实现
- 执行operator new的任何实现都返回指向大小为零的数组的保护页的指针
- ' new (std::nothrow) '是如何实现的?
- 当在全局命名空间中覆盖new/delete时,我应该使用std-rtl中的new/delete的默认实现
- new操作符-gnuc++如何实现new和delete
- c++内存分配器vptr/new实现
- 为什么虚拟功能在分配"new"时不能取消实现?
- 为什么C++ 'new'运算符的这种实现有效?
- 我可以在不使用new()的情况下实现工厂模式构造吗?