如果我想知道像标准C ++库那样编写的函数是如何工作的(而不仅仅是MSDN描述)。我的意思是它如何分配,管理,释放内存并返回结果。你需要知道在哪里或什么才能理解?
答案 0 :(得分:4)
您可以查看库标题。实际上实现了很多功能,因为库是高度模板化的(模板通常需要在头文件中实现)。标题的位置取决于编译器,但您应该能够非常轻松地找到它们(例如,搜索名为algorithm的文件)。
您也可以要求编译器预处理您的代码以查看所有相关的标题(这将产生极长的输出)。使用GCC,您可以g++ -E yoursource.cc
执行此操作。
如果您要查找的内容未在标头中实现,则需要库源,这些源默认情况下通常不会安装,甚至不能用于商业编译器(如MSVC)。寻找glibc(C库)和libstdc ++(C ++库),它们是GCC和其他一些编译器使用的。
在任何情况下,请注意标准库实现往往相当神秘,因为在变量名称中使用了大量下划线等(以避免与用户的宏发生名称冲突),并且通常它们也被#ifdefs感染了和其他预处理器。
答案 1 :(得分:3)
您需要了解用于编写C ++库的技术。获得Bjarne Stroustrup's本书是一个好的开始。此外,SGI在适当高的抽象级别上有关于STL的非常详细的文档。
如果您要调查基于Windows的内容,可能需要study Windows库的系统部分。
补充窗口:理解Posix规范也很重要。
答案 2 :(得分:1)
答案 3 :(得分:1)
分配/释放内存的操作系统函数与C ++标准库并不真正相关。
标准库容器(默认情况下)将使用new和delete作为内存,并使用特定于编译器的运行时,几乎可以肯定它管理自己的堆数据结构。这种方法通常更适合典型的应用程序使用,其中特定于平台的操作系统堆通常更适合分配大块。
应用程序堆将从操作系统堆中分配/释放内存,但“如何?”什么时候?”是特定于平台和特定于编译器的详细信息。
对于Win32内存管理API,请查看此处...
http://msdn.microsoft.com/en-us/library/ms810603.aspx
我确信如果需要,你可以找到win64等价物。
答案 4 :(得分:0)
我没有这本书,但根据其描述,http://www.amazon.com/C-Standard-Template-Library/dp/0134376331包括
- 使用和实现组件的实用技术
这不是你想要的吗?