我只是在libstdc ++ - v3中看到一些声明,但无法找到定义。 new
和delete
是否仅封装malloc
和free
?我在哪里可以找到new
和delete
的定义?为什么我找不到bits/c++allocator.h
中的bits/allocator.h
包含? gcc中有很多奇怪的事情。
答案 0 :(得分:2)
答案 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”是该结构的一部分。可以重新定义它们以改进内存管理。