描述
开 本: 16开纸 张: 铜版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787519883058
前言现今的C 语言为开发者提供了“编写富有表现力和健壮性代码的能力,同时几乎可在所有硬件平台上运行,并满足关键性能要求”。这使得C 成为一门独特的语言。在过去几年中,C 已经演变为一种现代化语言,使用更加有趣,并具有更实用的默认功能。本书的目标是,为你奠定编写高效应用程序坚实的基础,并深入了解现代C 中实现库的策略。与讲述C 的历史相比,我更倾向于以实践为导向的形式介绍当前C 的运行方式,包括其组成部分以及在C 17 和C 20 中引入的特性。考虑到C 20 中新增的特性,在编写本书时,我引入了能够与本书内容和重点相吻合的新特性。新特性更多的是关于概念的介绍,包含了少量的最佳实践和经过验证的解决方案。在本书出版时,编译器对书中介绍的一些C 20 特性的支持仍处于试验阶段。如果在出版日期阅读,可能需要一段时间才会被编译器完全支持。此外,本书的许多章节难度跨度较大。它们从绝对的基础知识开始,一直延伸到高级主题,如自定义内存分配器。你可以随时跳过某一节,以后再来学习。除了前三章之外,大多数章节都可以独立阅读。我们主要的技术审校者Timur Doumler 对本书的新版本影响深远。他的热情和积极的反馈让本书第一版的部分内容得以重新修订,呈现出更彻底、更深入地讲解。C 20 的新特性自然地融入各章,Timur 也是重要的贡献者。此外,Arthur O’Dwyer、Marius Bancila 和Lewis Baker 也审校了该书的部分内容。有如此多出色的审校者们参与到这个项目中,着实是件令人高兴的事情。希望你喜欢这个新版本,就像我享受编写它一样。本书的目标读者本书期望读者具备基本的C 和计算机体系结构知识,并对提升自身专业技能真正感兴趣。希望阅读本书后,能对如何在性能和语法上改进自己的C 代码有更深入的认识。此外,希望你在阅读本书时,能够有一些顿悟时刻。本书涵盖的内容第1 章,C 概述,介绍了C 的重要特性,如零成本抽象、值语义、常量正确性、显式所有权和错误处理。同时,本章还探讨了C 的缺点。第2 章,C 必b备技能,描述了使用auto 进行自动类型推导、lambda 函数、move 语义和错误处理。第3 章,分析和度量性能,将教你如何使用大O 符号来分析算法的复杂度,以及如何对代码进行剖析以找到性能瓶颈,并介绍了使用Google Benchmark 进行性能测试的方法。第4 章,数据结构,阐述了构建高效数据结构的重要性,以便快速访问数据。同时介绍了标准库中的容器,如std::vector,std::list、std::unordered_map 和std::priority_queue。本章最后还演示了如何使用并行数组。第5 章,算法,介绍了标准库中最重要的算法。将学习如何使用迭代器(Iterator)和范围(Ranges)处理数据,以及如何实现自己的通用算法。第6 章,范围和视图,将学习如何使用C 20 中引入的Ranges 库来组织算法,以及Ranges 库视图的实用性以及惰性求值的好处。第7 章,内存管理,重点关注安全而高效的内存管理。内容包括内存所有权、RAII、智能指针、堆栈内存、动态内存和自定义内存分配器。第8 章,编译时编程,介绍使用constexpr、consteval 和类型萃取等元编程技术。你将学习如何利用C 20 的概念和Concepts 库,以及元编程的实际应用,如反射。第9 章,Utilities 基础,引导你了解Utilities 库,如何利用编程技术从std::optional、std::any和std::variant 等类型中受益。第10 章,代理对象和惰性求值,探讨如何在保留清晰语法的同时,使用代理对象对内部优化,以及操作符重载的一些创造性用法。第11 章,并发,涵盖并发编程的基础知识,包括并行执行、共享内存、数据竞争和死锁。介绍了C 线程支持库、Atomic 库和C 内存模型。第12 章,协程和惰性生成器,提供对协程抽象的综合介绍。你将学习如何在CPU 上执行普通函数和协程,以及C 20 的无栈协程和生成器的用法。第13 章,用协程进行异步编程,介绍使用C 20 的无栈协程进行并发编程,并讨论使用Boost.Asio 进行异步网络编程的话题。第14 章,并行算法,展示编写并行算法的复杂度及如何度量其性能,以及如何利用标准库算法和执行策略在并行环境中进行并行计算。阅读本书的必要准备为了从本书中获得最大的收益,你确实需要具备基本的C 知识。如果你已经遇到与性能相关的问题,并正在寻找新的工具和实践方法来优化性能,那么你将能够更好地理解和应用本书中的内容,并从中获得更大的收获。本书包含大量代码示例,其中一些来自真实项目,但大多数是经过改造或大幅简化的示例,用于说明概念,并不会直接提供可在生产环境中运行的代码。我已经按照章节将所有代码示例划分并放置在相应的源文件中,这样做可以方便快速地找到实验案例。此外,我还使用了Google Test 框架编写了自动化测试用例,以取代示例中的大部分main()函数。我希望这些改变对你有所帮助,而不会增加困惑。这样做有助于我为每个例子提供有意义的描述,并使大家能够更便捷地一次性运行每章中的所有例子。为了编译和运行这些示例,你将需要:● 一台电脑。● 操作系统(这些示例已经在Windows、Linux 和macOS 上得到了验证)。● 编译器(我使用的是Clang、GCC 和Microsoft Visual C )。● CMake。提供的示例代码中的CMake 脚本将下载并安装其他依赖项,如Boost、Google Benchmark和Google Test。在撰写本书的过程中,我发现使用Compiler Explorer(https://godbolt.org/)非常有帮助。它是一个在线编译器,可以在此尝试不同版本的编译器。如果你尚未尝试过这些工具,我强烈建议你去体验一下!它们将为你带来许多便利和优势。下载示例代码文件本书代码托管在GitHub 上,位于https://github.com/ PacktPublishing/Cpp-High-Performance-Second-Edition。代码会在现有GitHub 代码库中持续更新。你可在https://github.com/PacktPublishing/找到其他由Packt 出版社出版的书籍和视频中的代码。下载彩色插图本书还提供了一个包含本书中使用的屏幕截图和图表的彩色图片的PDF 文件。可在这里下载该文件:https://static.packt-cdn.com/ downloads/9781839216541_ColorImages.pdf。文本格式约定本书使用以下文本约定。CodeInText:表示文本、文件夹名称、文件名、文件扩展名、假的URL 和用户输入。如:“关键字constexpr 是在C 11 中引入的。”以下是代码块的约定:#include int main() {std::cout << "High Performance C n";}本书在强调特定代码部分时会使用粗体来标记相关的行或项:#include int main() {std::cout << "High Performance C n";}命令行的输入输出格式如下:$ clang -std=c 20 high_performance.cpp$ ./a.out$ High Performance C 粗体字用于表示术语、重要词汇或在屏幕上可见的文字。例如:“填写表格并点击保存按钮”。警告或重要说明会以这样的方式呈现。联系方式我们非常欢迎读者的反馈。一般反馈:如果你对本书的任何方面有疑问,请在邮件主题中提及书名,并发送邮件至Packt([email protected])。我们期待您的来信。勘误:尽管我们已尽力确保内容的准确性,但错误可能仍会出现。如果你在本书中发现任何错误,我们将非常感激。请访问 www.packtpub.com/support/errata,选择本书,并点击“勘误提交表格”链接,并输入详细信息。盗版:如果你在互联网上发现任何非法拷贝我们作品的形式,请向我们提供网址或网站名称,我们将非常感激。请通过[email protected] 与我们联系,并提供相关材料的链接。如果愿意成为作者:如果你对某个专题有深入了解,并且对撰写书籍或投稿感兴趣,请访问 authors.packtpub.com。我们期待与您合作。撰写书评我们期待你的宝贵评论。在阅读并使用本书后,请在购买本书的网站上留下评论。供其他潜在读者参考你的意见,同时我们也可以了解你对Packt 产品的看法,而作者也能够看到你对书籍的反馈。非常感谢你的支持!如需了解更多关于Packt 的信息,请访问 packt.com。
评论
还没有评论。