 A Case-study in Rewriting a Legacy GUI Library for Real-time Audio Software in Modern C++0 码力 | 138 页 | 2.75 MB | 6 月前3 A Case-study in Rewriting a Legacy GUI Library for Real-time Audio Software in Modern C++0 码力 | 138 页 | 2.75 MB | 6 月前3
 面向亿行 C/C++ 代码的静态分析系统设计及实践-肖枭面向亿行C/C++代码的 静态分析系统设计及实践 肖枭 自我介绍 2016年香港科技大学取得博士学位 过去10年一直以极高的热情从事静态 分析技术的学术用研究 合作创办源伞科技,致力于推动静态 分析技术在企业中的应用 目录 代码质量管理是个大问题 静态分析+代码评审的实践  学习和强调,红线和惩罚,100%的测试 覆盖率,和事后复盘并不够  有经验的程序员也会犯错  对代码提要求很难监督落实 软件工程师一天被邀请进行多次 代码评审,这些都不是他们自身 的KPI • 一旦工期紧996,人工评审容易 变成走形式 • 任务挂着还容易造成工程师焦虑 降低工程师劳动强度 大规模C/C++静态代码评审系统搭建 数千个活跃开发 的代码仓库 每天上千次代码 评审请求 平均每次代码评 审小于50分钟 • 需要编译C/C++代码 • 使用了定理证明器求解可 行路径(精确,耗时) • 能跨函数分析 150 200 250 300 不编译 编译 报告数  编译流程融合静态分析  分布式编译与分析  大量使用缓存  提升静态分析的理论速度 如何做到10分钟反馈分析结果 系统地改进分析时间 编译流程 分析流程 依赖关系分析 分布式 编译 分布式 分析 分布式链接 跨模块分析 报告整合 缓存 缓存 缓存 缓存 硬核玩家:从理论上改进静态分析能力0 码力 | 39 页 | 6.88 MB | 1 年前3 面向亿行 C/C++ 代码的静态分析系统设计及实践-肖枭面向亿行C/C++代码的 静态分析系统设计及实践 肖枭 自我介绍 2016年香港科技大学取得博士学位 过去10年一直以极高的热情从事静态 分析技术的学术用研究 合作创办源伞科技,致力于推动静态 分析技术在企业中的应用 目录 代码质量管理是个大问题 静态分析+代码评审的实践  学习和强调,红线和惩罚,100%的测试 覆盖率,和事后复盘并不够  有经验的程序员也会犯错  对代码提要求很难监督落实 软件工程师一天被邀请进行多次 代码评审,这些都不是他们自身 的KPI • 一旦工期紧996,人工评审容易 变成走形式 • 任务挂着还容易造成工程师焦虑 降低工程师劳动强度 大规模C/C++静态代码评审系统搭建 数千个活跃开发 的代码仓库 每天上千次代码 评审请求 平均每次代码评 审小于50分钟 • 需要编译C/C++代码 • 使用了定理证明器求解可 行路径(精确,耗时) • 能跨函数分析 150 200 250 300 不编译 编译 报告数  编译流程融合静态分析  分布式编译与分析  大量使用缓存  提升静态分析的理论速度 如何做到10分钟反馈分析结果 系统地改进分析时间 编译流程 分析流程 依赖关系分析 分布式 编译 分布式 分析 分布式链接 跨模块分析 报告整合 缓存 缓存 缓存 缓存 硬核玩家:从理论上改进静态分析能力0 码力 | 39 页 | 6.88 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南需要先创建 build 目录 • 切换到 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命 令! • cmake -B build • --build 命令。 // 在源码目录用 -B 直接创建 build 目录并生成 build/Makefile // 自动调用本地的构建系统在 build 里构建,即: make -C build -j4 // 调用本地的构建系统执行 install 这个目标,即安 装 -D 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过 -D 设置缓存变量。第二次配置时,之前的0 码力 | 166 页 | 6.54 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南需要先创建 build 目录 • 切换到 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命 令! • cmake -B build • --build 命令。 // 在源码目录用 -B 直接创建 build 目录并生成 build/Makefile // 自动调用本地的构建系统在 build 里构建,即: make -C build -j4 // 调用本地的构建系统执行 install 这个目标,即安 装 -D 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过 -D 设置缓存变量。第二次配置时,之前的0 码力 | 166 页 | 6.54 MB | 1 年前3
 《深入浅出MFC》2/e买了您的译作深入Visual C++ 4.0 后,才认识您这在Windows Programming 著作方面的 头号人物。十分佩服您的文笔,译得通顺流畅,可谓信达雅。之后偶然翻阅您另外的作品 Windows 95 系统程序设计大奥秘与深入浅出MFC,更是对您五体投地,立刻将这两 本书买下来,准备好好享受一下。对于深入浅出MFC,我给予极高的评价,因为它完全 满足我的需要。我去年才从台大电机博士班计算器科学组毕业,目前在资策会信息技术处服 程序开发的工具,但是由于MFC 系统相当庞大,内 容繁杂,并且夹杂着大量令初学者莫明其妙的macros,更加大了学习上的难度。 当今市面上有不少讲解C++ 和VC++ 程序设计的书籍,但C++ 书籍单纯只讲C++,从 C++ 过渡到VC++ 却是初学者的一大难关;大多数讲解VC++ 的书都将重点放在如何使用 Microsoft Developer Studio,很少有对MFC 进行深入而有系统的讲解。而将C++ 美国dengqi@glocom-us.com 侯俊杰先生:您好!从学校出来的七年间,我大多从事embedded system software 的设计。 在大陆,主要从事交换机系统软件的设计,到了美国,主要从事卫星通信地面站系统软件的 设计。程序设计主要结合C 和Assembly。在大陆,embedded system 多采用Intel 的 processor,在美国,embedded system0 码力 | 1009 页 | 11.08 MB | 1 年前3 《深入浅出MFC》2/e买了您的译作深入Visual C++ 4.0 后,才认识您这在Windows Programming 著作方面的 头号人物。十分佩服您的文笔,译得通顺流畅,可谓信达雅。之后偶然翻阅您另外的作品 Windows 95 系统程序设计大奥秘与深入浅出MFC,更是对您五体投地,立刻将这两 本书买下来,准备好好享受一下。对于深入浅出MFC,我给予极高的评价,因为它完全 满足我的需要。我去年才从台大电机博士班计算器科学组毕业,目前在资策会信息技术处服 程序开发的工具,但是由于MFC 系统相当庞大,内 容繁杂,并且夹杂着大量令初学者莫明其妙的macros,更加大了学习上的难度。 当今市面上有不少讲解C++ 和VC++ 程序设计的书籍,但C++ 书籍单纯只讲C++,从 C++ 过渡到VC++ 却是初学者的一大难关;大多数讲解VC++ 的书都将重点放在如何使用 Microsoft Developer Studio,很少有对MFC 进行深入而有系统的讲解。而将C++ 美国dengqi@glocom-us.com 侯俊杰先生:您好!从学校出来的七年间,我大多从事embedded system software 的设计。 在大陆,主要从事交换机系统软件的设计,到了美国,主要从事卫星通信地面站系统软件的 设计。程序设计主要结合C 和Assembly。在大陆,embedded system 多采用Intel 的 processor,在美国,embedded system0 码力 | 1009 页 | 11.08 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程std::milli> 的别名 跨平台的 sleep : std::this_thread::sleep_for • 可以用 std::this_thread::sleep_for 替代 Unix 类操作系统专有的的 usleep 。他可 以让当前线程休眠一段时间,然后继续。 • 而且单位也可以自己指定,比如这里是 milliseconds 表示毫秒,也可以换成 microseconds 表示微秒, 前线程休眠直到某个时间点。 第 1 章:线程 进程与线程 • 进程是一个应用程序被操作系统拉起来加载到内存之后从开始执行到执行结束的这样一个 过程。简单来说,进程是程序(应用程序,可执行文件)的一次执行。比如双击打开一个 桌面应用软件就是开启了一个进程。 • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是 CPU 可 执行调度的最小单位。也就是说,进程本身并不能获取 对于高性能并行计算,更好的是多线程。 为什么需要多线程:无阻塞多任务 • 我们的程序常常需要同时处理多个任务。 • 例如:后台在执行一个很耗时的任务,比 如下载一个文件,同时还要和用户交互。 • 这在 GUI 应用程序中很常见,比如浏览 器在后台下载文件的同时,用户仍然可以 用鼠标操作其 UI 界面。 没有多线程:程序未响应 • 没有多线程的话,就必须等文件下载完了 才能继续和用户交互。 •0 码力 | 79 页 | 14.11 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程std::milli> 的别名 跨平台的 sleep : std::this_thread::sleep_for • 可以用 std::this_thread::sleep_for 替代 Unix 类操作系统专有的的 usleep 。他可 以让当前线程休眠一段时间,然后继续。 • 而且单位也可以自己指定,比如这里是 milliseconds 表示毫秒,也可以换成 microseconds 表示微秒, 前线程休眠直到某个时间点。 第 1 章:线程 进程与线程 • 进程是一个应用程序被操作系统拉起来加载到内存之后从开始执行到执行结束的这样一个 过程。简单来说,进程是程序(应用程序,可执行文件)的一次执行。比如双击打开一个 桌面应用软件就是开启了一个进程。 • 线程是进程中的一个实体,是被系统独立分配和调度的基本单位。也有说,线程是 CPU 可 执行调度的最小单位。也就是说,进程本身并不能获取 对于高性能并行计算,更好的是多线程。 为什么需要多线程:无阻塞多任务 • 我们的程序常常需要同时处理多个任务。 • 例如:后台在执行一个很耗时的任务,比 如下载一个文件,同时还要和用户交互。 • 这在 GUI 应用程序中很常见,比如浏览 器在后台下载文件的同时,用户仍然可以 用鼠标操作其 UI 界面。 没有多线程:程序未响应 • 没有多线程的话,就必须等文件下载完了 才能继续和用户交互。 •0 码力 | 79 页 | 14.11 MB | 1 年前3
 Quickly Testing Qt Desktop Applications With Approval Testscom/claremacrae/talks5 About… 5 Any Questions ?6 Typical Scenario • I've inherited some Qt GUI code • It's valuable • I need to add feature • Or fix bug • How can I ever break out of this •Qt –Setting Up Testing –Error-prone Things –Approval Tests •Extras –Tools –Summary910 Qt’s GUI powers make Automated Testing Harder11 Give you Confidence to Start testing your Qt application static lib for tests Executable Color Key GUI.exe main() and *.cpp *.ui15 Introduce static lib for tests Static Library Executable Color Key GUI.exe main() UI.lib *.cpp *.ui16 Introduce0 码力 | 77 页 | 6.96 MB | 6 月前3 Quickly Testing Qt Desktop Applications With Approval Testscom/claremacrae/talks5 About… 5 Any Questions ?6 Typical Scenario • I've inherited some Qt GUI code • It's valuable • I need to add feature • Or fix bug • How can I ever break out of this •Qt –Setting Up Testing –Error-prone Things –Approval Tests •Extras –Tools –Summary910 Qt’s GUI powers make Automated Testing Harder11 Give you Confidence to Start testing your Qt application static lib for tests Executable Color Key GUI.exe main() and *.cpp *.ui15 Introduce static lib for tests Static Library Executable Color Key GUI.exe main() UI.lib *.cpp *.ui16 Introduce0 码力 | 77 页 | 6.96 MB | 6 月前3
 Tracy: A Profiler You Don't Want to Misscode annotations (markup) Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … An interactive, responsive and visual tool transforms the profiling experience! 11 Closing Instrumentation code annotations Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … 12 Closing the Profiling Zoo holistic (automatic) issues: information overload; profiling and visual tool transforms the profiling experience! Tracy can do it all!Tracy Profiler GUI 13Tracy Profiler GUI 14 Frame Info Menu bar GPU Timeline (per “device”) CPU Timeline (per-thread) Custom0 码力 | 84 页 | 8.70 MB | 6 月前3 Tracy: A Profiler You Don't Want to Misscode annotations (markup) Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … An interactive, responsive and visual tool transforms the profiling experience! 11 Closing Instrumentation code annotations Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … 12 Closing the Profiling Zoo holistic (automatic) issues: information overload; profiling and visual tool transforms the profiling experience! Tracy can do it all!Tracy Profiler GUI 13Tracy Profiler GUI 14 Frame Info Menu bar GPU Timeline (per “device”) CPU Timeline (per-thread) Custom0 码力 | 84 页 | 8.70 MB | 6 月前3
 Tracy: A Profiler You Don't Want to Misscode annotations (markup) Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … An interactive, responsive and visual tool transforms the profiling experience! 11 Closing code annotations (markup) Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … 12 Closing the Profiling Zoo holistic (automatic) issues: information overload; profiling interactive, responsive and visual tool transforms the profiling experience!Tracy Profiler GUI 13Tracy Profiler GUI 14 Frame Info Menu bar GPU Timeline (per “device”) CPU Timeline (per-thread) Custom0 码力 | 85 页 | 6.51 MB | 6 月前3 Tracy: A Profiler You Don't Want to Misscode annotations (markup) Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … An interactive, responsive and visual tool transforms the profiling experience! 11 Closing code annotations (markup) Analysis pre-recorded? | real-time? log files? | command-line tool? | GUI?, … 12 Closing the Profiling Zoo holistic (automatic) issues: information overload; profiling interactive, responsive and visual tool transforms the profiling experience!Tracy Profiler GUI 13Tracy Profiler GUI 14 Frame Info Menu bar GPU Timeline (per “device”) CPU Timeline (per-thread) Custom0 码力 | 85 页 | 6.51 MB | 6 月前3
 Get off my thread: Techniques for moving k to background threadsProgress updates in a GUI Updating other UI informationProgress Updates Background threads might need to update the event thread with information. Progress updates in a GUI Updating other UI information process(Event details){ co_await step_1(details) co_await schedule_on_gui_thread( update_progress(1)); co_await step_2(details) co_await schedule_on_gui_thread( update_progress(2)); // ... }GuidelinesGuidelines0 码力 | 90 页 | 6.97 MB | 6 月前3 Get off my thread: Techniques for moving k to background threadsProgress updates in a GUI Updating other UI informationProgress Updates Background threads might need to update the event thread with information. Progress updates in a GUI Updating other UI information process(Event details){ co_await step_1(details) co_await schedule_on_gui_thread( update_progress(1)); co_await step_2(details) co_await schedule_on_gui_thread( update_progress(2)); // ... }GuidelinesGuidelines0 码力 | 90 页 | 6.97 MB | 6 月前3
 C++高性能并行编程与优化 -  课件 - 12 从计算机组成原理看 C 语言指针也有人说 1 KiB 才是 1024 B 的,但是很少有人采用这种写法…… • 在买硬盘和 u 盘等存储设备的时候,往往会出现容量减少的情况,这是因为生产厂家按照 的是 1000 倍的换算的,而我们的系统中一般都是按照 1024 倍去计算的。 字还被用于表示内存地址 • 字的长度除了决定一次处理的整数大小之外,还决定了能访问的内存地址的范围。 • 这是因为内存是一维排列的,假如内存容量是 65536 是短整数类型,大小为 16 位或者说 2 字节。 int 是整数类型,大小为 32 位或者说 4 字节。 long long 是超长整数类型,大小为 64 位或者说 8 字节。 long 比较特殊,在 Unix 上随系统位数变化, Windows 上始终是 32 位。 C 语言的基础整数类型 类型 Unix 32 位 Unix 64 位 Windows 32 位 Windows 64 位 char 8 位 8 64 位 64 位 注意到 Unix 和 Windows 关于 long 的定义有分歧: Unix 认为 long 的大小应该和系统架构位数一样, 32 位系统上就 32 位, 64 位系统上就 64 位。 Windows 认为 long 不论 32 位系统还是 64 位系统都一样应该为 32 位,认为这样安全。 因此我们在编写 C 语言程序时,应该避免使用 long 类型,他会导致你的程序难以跨平台。0 码力 | 128 页 | 2.95 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 12 从计算机组成原理看 C 语言指针也有人说 1 KiB 才是 1024 B 的,但是很少有人采用这种写法…… • 在买硬盘和 u 盘等存储设备的时候,往往会出现容量减少的情况,这是因为生产厂家按照 的是 1000 倍的换算的,而我们的系统中一般都是按照 1024 倍去计算的。 字还被用于表示内存地址 • 字的长度除了决定一次处理的整数大小之外,还决定了能访问的内存地址的范围。 • 这是因为内存是一维排列的,假如内存容量是 65536 是短整数类型,大小为 16 位或者说 2 字节。 int 是整数类型,大小为 32 位或者说 4 字节。 long long 是超长整数类型,大小为 64 位或者说 8 字节。 long 比较特殊,在 Unix 上随系统位数变化, Windows 上始终是 32 位。 C 语言的基础整数类型 类型 Unix 32 位 Unix 64 位 Windows 32 位 Windows 64 位 char 8 位 8 64 位 64 位 注意到 Unix 和 Windows 关于 long 的定义有分歧: Unix 认为 long 的大小应该和系统架构位数一样, 32 位系统上就 32 位, 64 位系统上就 64 位。 Windows 认为 long 不论 32 位系统还是 64 位系统都一样应该为 32 位,认为这样安全。 因此我们在编写 C 语言程序时,应该避免使用 long 类型,他会导致你的程序难以跨平台。0 码力 | 128 页 | 2.95 MB | 1 年前3
共 44 条
- 1
- 2
- 3
- 4
- 5













