Linux系统编程-静态库动态库
静态库文件名格式为:lib{name}.a,只有 {name} 部分可自定义。 动态库文件名格式为:lib{name}.so,只有 {name} 部分可自定义。 静态库和动态库的区别: 静态库会被链接到程序中,而动态库则只记录了库的名称,程序运行时才去对应的路径中加载库。 静态库加载速度快,但较消耗内存,动态库则相反。 gcc 编译流程 -I 指定头文件所在目录位置 -c 只做预处理,编译,汇编。得到二进制文件 -g 编译时添加调试文件,用于 gdb 调试 -Wall 显示所有警告信息 -D 向程序中“动态”注册宏定义 -l 指定动态库库名 -L 指定动态库路径 -O0 关闭优化 (默认) -O1/-O 让可执⾏⽂件更⼩,速度更快 -O2 采⽤⼏乎所有的优化⼿段 静态库静态库在生成时应提供一个头文件(包含函数声明),以便其他人知晓库提供的方法,方便使用库。 写好源代码 mymath.c, mymath.h 12345678910111213141516171819202122232425262728//...
STL容器
线程安全: 这里列出的C++ 标准库中的容器都不是线程安全的!多个线程读时不需要加锁,但有一个线程写时,所有读写线程都需要加锁! 效率说明: emplace_back() 是c11新加的,功能与 push_back() 一样,但效率更高,推荐优先使用 序列式容器 序列式容器 hackingcpp Array 固定大小的数组,必须在建立时就指明其大小。 .front():返回第一元素的引用,你可以使用这些操作函数更改元素内容 .back():返回最末元素的引用,c.back() = 10 Vector Vector 是一个 dynamic array。 大小可变,但内存重新分配很耗时间。 在Vector尾部附加元素或移除元素都很快速,但是在Vector的中段或起始段安插元素就比较费时 .front():返回第一元素的引用 (不检查是否存在第一元素) .back():返回最末元素的引用 (不检查是否存在最末元素),c.back() = 10 .push_back(elem):尾部附加元素 .pop_back():移除最后一个元素 .insert(pos,...
数据结构摘要
只有重点、简洁的介绍,方便查阅! 数据结构可视化网站:部分结构如树,点击后需要手动添加节点,且能看到其变化的过程。另一个可视化数据结构和算法的网站:visualgo.net/zh 树 树是由根节点和若干颗子树构成。 每个节点都只有有限个子节点或无子节点。 没有父节点的节点称为根节点。没有子节点的节点称为叶子节点。 树的深度/高度:根节点到最远叶子节点的最长路径上的节点数。 二叉树 每个节点最多只有两个子节点的树。 满二叉树 树中的每个节点仅包含 0 或 2 个子节点。 完全二叉树 除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。 重要性质: 在二叉树上的第i层上至多有 $2^{i-1}, i>=1$个节点。 深度为k的二叉树至多有 $2^k-1, k >= 1$个节点。 具有n个节点的完全二叉树的深度为 floor{ log2(n) } + 1 。 对一颗具有n个节点的完全二叉树中的节点从0开始按层序编号,对任意节点i: 其父节点编号为:floor{...
Tensorflow-hub
Tensorflow-hub介绍 tfhub.dev包含一系列模型,根据处理对象Problem domain分成了四类:Image, Text, Video, Audio 模型格式模型格式又可分为TF.js, TFLite, Coral TF.js 是用于浏览器的模型。ref TFLite 使用的思路主要是从预训练的模型转换为tflite模型文件,拿到移动端部署。ref Coral 是google发布在一款开发板,类似树莓派,专门用于跑神经网络模型。ref 上述三类模型都是比较特殊的格式(在电脑上或服务器上运行不使用上述3种格式!),模型列表中的右上角有标出格式。而实际上还有其他格式的模型(TF2.0 Saved Model, Hub module等),只有进入模型页面后才能看见。 Tensorflow Serving 使用的是TF2.0 Saved Model格式的模型! Collection是处理一类问题的一系列模型的集合,而且在Collection中会展示模型的性能(推理时间等!)在选择模型时非常方便 模型使用进入模型介绍页面后,如下图: COPY URL...