gnu c ++如何实现new和delete

时间:2015-07-05 09:55:23

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

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

3 个答案:

答案 0 :(得分:2)

  

new和delete是否只封装了malloc并且是免费的?

查看this StackOverflow answer

  

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

找到新的描述并删除here

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

答案 1 :(得分:1)

尽管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()。​​

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

答案 2 :(得分:0)

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

overloading new/delete

相关问题