我理解libstdc ++代码现在与libc代码捆绑在一起。我从这里下载了完整的gcc 4.8.2代码:
http://www.netgull.com/gcc/releases/gcc-4.8.2/
但是,在c ++程序中分配内存时,我找不到任何名为new.c
或new.cpp
的文件,其中包含类似new()
的内容。
我找到了new_op.cc
,但不确定这是否是相同的运行时函数?如果没有,我在哪里可以找到我链接到上面的zip中的new()
源代码?
答案 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
调用)完成的,该libc
在SYSENTER
内实现并使用mmap(2)(和相关的)系统调用来更改{ {3}}。 Syscalls在内核中实现,是来自应用程序内部的基本原子操作(通常会执行{{1}}机器指令切换到内核模式)