位于gcc源代码中的C ++ new()函数在哪里?

时间:2013-12-15 03:45:38

标签: c++ gcc g++ malloc new-operator

我理解libstdc ++代码现在与libc代码捆绑在一起。我从这里下载了完整的gcc 4.8.2代码:

http://www.netgull.com/gcc/releases/gcc-4.8.2/

但是,在c ++程序中分配内存时,我找不到任何名为new.cnew.cpp的文件,其中包含类似new()的内容。

我找到了new_op.cc,但不确定这是否是相同的运行时函数?如果没有,我在哪里可以找到我链接到上面的zip中的new()源代码?

1 个答案:

答案 0 :(得分:2)

Ubuntu GCC 4.8并不完全是FSF提供的GCC 4.8!分发正在修补GCC。所以获取Ubuntu源包。 ::operator new位于libstdc++-v3/libsupc++/new(已安装为<new>标题)和libstdc++-v3/libsupc++/new_*.cc GCC来源文件。

大部分工作都是由malloc(来自new_op.cc调用)完成的,该libcSYSENTER内实现并使用mmap(2)(和相关的)系统调用来更改{ {3}}。 Syscalls在内核中实现,是来自应用程序内部的基本原子操作(通常会执行{{1}}机器指令切换到内核模式)