C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南),避免符号冲突 • 在声明和定义外面都套一层名字空间,例如此处我的子项目名是 biology ,那 我就 biology::Animal 。避免暴露全局的 Animal 。这是因为万一有个“不拘一 格”的第三方库也暴露个全局的 Animal ,两个符号就会发生冲突,由于类符号 都具有 weak 属性,链接器会随机选择一个覆盖掉,非常危险! • (关于符号的 weak 属性,以后单独开一门 C++ 课讲讲,这一课还是重点关注 function 的区别 • macro 相当于直接把代码粘贴过去,直接访问调用者的作用域。这里写的相对路径 include 和 src ,是基于调用者所在路径。 • function 则是会创建一个闭包,优先访问定义者的作用域。这里写的相对路径 include 和 src ,则是基于定义者所在路径。 https://cmake.org/cmake/help/latest/command/function function 中则是基于定义者所在路径,优先访问定义者的作用域。这里需要 set(key val PARENT_SCOPE) 才能修改到外面的变量。 第二章:第三方库 / 依赖项配置 用 find_package 寻找系统中安装的第三方库并链接他们 find_package 命令 • 常用参数列表一览: • find_package([version] [EXACT] 0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起# 添加一个宏定义 • add_compile_options(-fopenmp) # 添加编译器命令行选项 第三方库 - 作为纯头文件引入 • 有时候我们不满足于 C++ 标准库的功能,难免会用到一些第三方库。 • 最友好的一类库莫过于纯头文件库了,这里是一些好用的 header-only 库: 1. nothings/stb - 大名鼎鼎的 stb_image include_directories(spdlog/include) 即 可。 • 缺点:函数直接实现在头文件里,没有提前编译,从而需要重复编译同样内容,编译时间长。 glm - 使用这个神奇的数学库 第三方库 - 作为子模块引入 • 第二友好的方式则是作为 CMake 子模块引入,也就是通过 add_subdirectory 。 • 方法就是把那个项目(以 fmt 为例)的源码放到你工程的根目录: CMake - 引用系统中预安装的第三方库 • 可以通过 find_package 命令寻找系统中的包 / 库: • find_package(fmt REQUIRED) • target_link_libraries(myexec PUBLIC fmt::fmt) • 为什么是 fmt::fmt 而不是简单的 fmt ? • 现代 CMake 认为一个包 (package) 可以提供多个库,又称组件0 码力 | 32 页 | 11.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南卸载)。然后安装 Arch Linux 系统 。 • 需要手动修改或查看一个 ELF 文件的 RPATH ,可以用 chrpath 或 patchelf 命令。 yyds 第 5 章:链接第三方库 案例:需要使用 tbb 这个库 直接链接 tbb 的缺点 如果这样直接指定 tbb , CMake 会让链接器在系统的库目录里查找 tbb , 他会找到 /usr/lib/libtbb.so 这样他会优先查找 TBBConfig.cmake (系统自带的)而不是 FindTBB.cmake (项目作者常 把他塞在 cmake/ 目录里并添加到 CMAKE_MODULE_PATH )。这样能保证寻找包的这个 .cmake 脚本是和系统自带的 tbb 版本是适配的,而不是项目作者当年下载的那个版本 的 .cmake 脚本。 当然,如果你坚持要用 find_package(TBB REQUIRED) 的包管理器安装 tbb 后也会自动安装 这个文件。少部分对 CMake 不友好的第三方库,需要自己写 FindXXX.cmake 才能使用。 老年项目案例: OpenVDB (反面教材) 一些老年项目作者喜欢在项目里自己塞几个 FindXXX.cmake ,然而版本可能和系统里 的不一样,比如用 3.0 的 finder 去找 2.0 的包,容易出现一些奇奇怪怪的错误。 不建议大家这样用自己创建一个 cmake/0 码力 | 166 页 | 6.54 MB | 1 年前3
Rust分布式账务系统 - 胡宇心路历程 吐槽点 ● Nightly 版本编译器: tikv , raft-rs ● 无官方库,官方库支持不成熟 ○ Kafka (第三方: https://github.com/kafka-rust/kafka-rust) ○ PostgreSQL ( 第三方: https://github.com/sfackler/rust-postgres) ○ Google Cloud Platform(GCP)0 码力 | 27 页 | 12.60 MB | 1 年前3
基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺Multi-address DSN(Data Source Name) parser. TDengine 应用开发组 • Python/Rust/Go 连接器 • 数据可视化 • 数据库运维工具 • 第三方数据源接入 • BI 系统接入 https://taosdata.com/ https://github.com/zitsen CONTENTS 自 我 介 绍 T D e n g i n0 码力 | 29 页 | 2.26 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践 实现封装和代码重用?简单,只需用一种被小彭老师称为类型擦除 (type-erasure) 的大法 。 类型擦除:还是以猫和狗为例 • 例如右边的猫和狗类,假设这两个类是某个第 三方库里写死的,这个第三方库的作者可能没 上过《面向对象程序设计》,居然没有定义一 个公用的 Animal 基类并设一个 speak 为虚 函数。现在你抱怨也没有用,因为这个库是按 LGPL 协议开源的,你只能链接他,不能修改0 码力 | 54 页 | 3.94 MB | 1 年前3
Go读书会第二期无类型常量与 iota 的应用 • 定义零值可用的类型 • 通过复合字面值的初始化 • 切片、字符串、 map 的原理、惯 用法与坑 每个 gopher 编写 Go 代码都会用到的 • Go 包导入相关 • 代码块与作用域 • 控制语句的惯用法与坑 Part4 – 语法基础:函数与方法 践行哲学,遵循惯例,认清本质,理解原理 • Init 函数 • 成为“一等公民” • defer 践行哲学,遵循惯例,认清本质,理解原理 • 高频使用的标准库包 ( net 、 http 、 strings 、 time 、 crypto 等 ) • Reflect 反射使用三大法则 • Cgo 使用的开销 • Unsafe 包的安全使用法则 “ 自带电池”,开箱即用 Part10 – 工程实践 践行哲学,遵循惯例,认清本质,理解原理 • Go module • 自定义 go 包导入路径 • Go 命令使用(包括代码生成)0 码力 | 26 页 | 4.55 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串想要完整的功能(指定多少进制,左右对齐等),可以用专业的做法: 1. 古代 C 语言的 sprintf 2. 古代 C++ 的 stringstream 3. C++20 新增的 std::format 4. 第三方库提供的 fmt::format ( https://github.com/fmtlib/fmt ) 5. 参考小彭老师在 zeno 里手撸的两个函数(能支持任意 STL 容器的打印) : • https://github0 码力 | 162 页 | 40.20 MB | 1 年前3
Zadig 产品使用手册, Q C o n / M S U P / T G O / 极 客 时 间 效 能 特 邀 讲 师 。 为 数 百 研 发 团 队 , 数 千 名 工 程 师 提 供 效 能 实 战 培 训 , 包 括 腾 讯 P C G / T E G 、 字 节 跳 动 、 小 红 书 等 。 专 注 在 云 原 生 C I / C D 、 D e v O p s 、 平 台 工 程 架 构 等 大 的 研 究 和 应 用 。 主 导 研 发 的 Z a d i g 开 源 D e v O p s 软 件 工 程 平 台 已 被 2 0 0 0 多 家 企 业 广 泛 使 用 , 包 括 字 节 跳 动 飞 书 、 极 氪 、 小 鹏 、 路 特 斯 等 数 百 家 各 行 业 领 军 企 业 。 郭 健 ( G r a n t ) : K o d e R o v e r0 码力 | 52 页 | 22.95 MB | 1 年前3
谈谈MYSQL那点事, Delete SQL Delete SQL 性能。 性能。 Decimal Decimal 类型字段不要单独建立为索引,但覆盖索引可以 类型字段不要单独建立为索引,但覆盖索引可以 包 包 含这些字段。 含这些字段。 只有建立索引以后,表内的行才按照特地的顺序存储,按照 只有建立索引以后,表内的行才按照特地的顺序存储,按照 需要可以是 需要可以是 asc asc0 码力 | 38 页 | 2.04 MB | 1 年前3
共 16 条
- 1
- 2













