面向亿行 C/C++ 代码的静态分析系统设计及实践-肖枭代码质量责任应该左移 设计 代码 开发 代码 评审 入库 测试 发布 1. 非研发人员主导,沟通成本高,推动修复周期长 2. 很难形成标准推动研发实施 3. 形成技术债,偿债成本高 1. 代码签入前,研发人员有义务修复问题 2. 测试人员早期加入,更懂项目研发的情况,沟通成本低,加快上线 3. 能逐步形成好的编码规范和最佳实践 检查代码风格问题挺准,但是 我warning都不看,还看这个? 无需额外操作,不改变程序员习惯的流程 只分析变化的代码引起的问题 使用频次高,可形成数据驱动的分析器改进和 代码质量监控 推动规范落地和培训教育新员工 提高人工评审效果 零培训成本强制使用 基于gitlab的自动代码评审演示0 码力 | 39 页 | 6.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector== 。但 是模仿指针行为的这些运算符,已然成为了 C++ 事实上的标准,而且也非常简洁明了。 • 因此所有的用户和库,都会按照这套运算符标准来 实现和使用迭代器,建立起了沟通的桥梁,节省了 各自创立一套规范的成本。 迭代器模式: ++ 的前置和后置 • 迭代器的自增运算符分为 ++p 和 p++ 两种写法。 • 他们都会产生 p = p + 1 的效果,但是有一个细微的 区别,就是他们被作为表达式时的返回值。0 码力 | 90 页 | 4.93 MB | 1 年前3
《深入浅出MFC》2/eleDoc 的 修改」一节之中于SCRIBBLEDOC.H 源代码列表后的一段说明(#477 页)。 深入淺出 MFC 40 如何联络作者 我非常乐意和本书的所有读者沟通,接受您对本书以及对我的指正和建议。请将沟通内 容局限在对书籍、对知识的看法,以及对本书误谬之指正和建议上面,请勿要求我为您 解决技术问题(例如您的程序臭虫或您的项目瓶颈)。如果只是单纯地想和我交个朋友 聊聊天,我更倍感荣幸。 DLL 和KERNEL32.DLL , 又有16 位的GDI. EXE 、USER. EXE 和 KRNL386.EXE。32 位和16 位两组DLLs 之间以所谓的thunking layer 沟通。站在纯 粹APIs 使用者的立场,目前我们不必太搭理这个事实。 Windows 发展至今,逐渐加上的一些新的API 函数(例如Common Dialog、ToolHelp) 并不放在GDI 和USER 函数,但是它通常只处 理WM_INITDIALOG 和WM_COMMAND 两个消息。对话框中的各个控制组件也 都是小小窗口,各有自己的窗口函数,它们以消息与其管理者(父窗口,也就 是对话框)沟通。而所有的控制组件传来的消息都是WM_COMMAND,再由其 参数分辨哪一种控制组件以及哪一种通告(notification)。 23 Modal 对话框的激活与结束,靠的是DialogBox0 码力 | 1009 页 | 11.08 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo ;而如果给定的数据是固定 位数的整数(例如学号),那么我们就可以用效率更高的“基数排序”来做,将时间复杂度降为 ?(??) , 其中 ? 为位数。当数据体量很大时,节省出来的运行时间就能创造较大价值(成本降低、体验变好等)。 在工程领域中,大量问题是难以达到最优解的,许多问题只是被“差不多”地解决了。问题的难易程度一方 面取决于问题本身的性质,另一方面也取决于观测问题的人的知识储备。人的知识越完备、经验越多,分析 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 L1、L2、L30 码力 | 379 页 | 18.48 MB | 10 月前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过 的规则文件。 • 那个和操作系统绑定的构建系统( make 、 MSBuild )称为本地构建系统( native buildsystem )。 • 负责从 CMakeLists.txt 生成本地构建系统构建规则文件的,称为生成器( generator )。 -G 选项:指定要用的生成器 • Linux 系统上的 CMake 默认用是 Unix Makefiles 生成器; Windows0 码力 | 166 页 | 6.54 MB | 1 年前3
Hello 算法 1.1.0 C++ 版isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 L1、L2、L3 缓存的容量逐步增大,其物理尺寸会变大,与 CPU 核心之间的物理距离会变远,从而导致数据传输时间增加,元素访问延迟变高。在当前技术下,多层级 的缓存结构是容量、速度和成本之间的最佳平衡点。 图 4‑9 计算机存储系统 Note 计算机的存储层次结构体现了速度、容量和成本三者之间的精妙平衡。实际上,这种权衡普遍存在于 所有工业领域,它要求我们在不同的优势和限制之间找到最佳平衡点。 总的来说,硬盘用于长期存储大量0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请 各位老师和同学批评指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着 L1、L2、L3 缓存的容量逐步增大,其物理尺寸会变大,与 CPU 核心之间的物理距离会变远,从而导致数据传输时间增加,元素访问延迟变高。在当前技术下,多层级 的缓存结构是容量、速度和成本之间的最佳平衡点。 图 4‑9 计算机存储系统 � 计算机的存储层次结构体现了速度、容量和成本三者之间的精妙平衡。实际上,这种权衡普遍 存在于所有工业领域,它要求我们在不同的优势和限制之间找到最佳平衡点。 总的来说,硬盘用于长期存储大量数0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 C++ 版isn’t free. You have to pay attention.”從這個意義上看,這本 書並非完全“免費”。為了不辜負你為本書所付出的寶貴“注意力”,我會竭盡所能,投入最大的“注意力” 來完成本書的創作。 本人自知學疏才淺,書中內容雖然已經過一段時間的打磨,但一定仍有許多錯誤,懇請各位老師與同學批評 指正。 本書中的程式碼附有可一鍵執行的原始檔,託管於 github.com/krahets/hello‑algo ;而如果給定的資料是 固定位數的整數(例如學號),那麼我們就可以用效率更高的“基數排序”來做,將時間複雜度降為 ?(??) ,其中 ? 為位數。當資料體量很大時,節省出來的執行時間就能創造較大價值(成本降低、體 驗變好等)。 在工程領域中,大量問題是難以達到最優解的,許多問題只是被“差不多”地解決了。問題的難易程度一方 面取決於問題本身的性質,另一方面也取決於觀測問題的人的知識儲備。人的知識越完備、經驗越多,分析 我們可以將計算機儲存系統想象為圖 4‑9 所示的金字塔結構。越靠近金字塔頂端的儲存裝置的速度越快、容 量越小、成本越高。這種多層級的設計並非偶然,而是計算機科學家和工程師們經過深思熟慮的結果。 ‧ 硬碟難以被記憶體取代。首先,記憶體中的資料在斷電後會丟失,因此它不適合長期儲存資料;其次, 記憶體的成本是硬碟的幾十倍,這使得它難以在消費者市場普及。 ‧ 快取的大容量和高速度難以兼得。隨著 L1、L2、L30 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.0.0b4 C++版结构中的栈和堆不是同一概念)。 1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。 2. 栈是一块比较小的内存,容易出现内存不足;堆内存很大,但是由于是动态分配,容易 碎片化,管理堆内存的难度更大、成本更高。 3. 访问栈比访问堆更快,因为栈内存较小、对缓存友好,堆帧分散在很大的空间内,会出 现更多的缓存未命中。 4. 数组与链表 hello‑algo.com 66 � 为什么数组会强调0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b5 C++版结构中的栈和堆不是同一概念)。 1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。 2. 栈是一块比较小的内存,容易出现内存不足;堆内存很大,但是由于是动态分配,容易 碎片化,管理堆内存的难度更大、成本更高。 3. 访问栈比访问堆更快,因为栈内存较小、对缓存友好,堆帧分散在很大的空间内,会出 现更多的缓存未命中。 � 为什么数组要求相同类型的元素,而在链表中却没有强调同类型呢? 链表由结0 码力 | 377 页 | 30.69 MB | 1 年前3
共 10 条
- 1













