理解c ++中的库函数

时间:2010-02-23 11:45:57

标签: c++ stl implementation c++-standard-library

如果我想知道像标准C ++库那样编写的函数是如何工作的(而不仅仅是MSDN描述)。我的意思是它如何分配,管理,释放内存并返回结果。你需要知道在哪里或什么才能理解?

5 个答案:

答案 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包括

  

- 使用和实现组件的实用技术

这不是你想要的吗?