cpp 变成./a.out执行文件的编译的过程, 系统是如何启动
编译阶段:使用 C++ 编译器(如 g++)将源代码(.cpp 文件)编译成目标文件(.o 文件)。编译器会将源代码翻译成机器可执行的指令,并生成与平台相关的目标文件。
链接阶段:使用链接器(如 ld)将目标文件和所需的库文件链接成可执行文件。链接器会解析目标文件中的符号(如函数和变量),并将它们与库文件中的定义进行关联,生成最终的可执行文件。
可执行文件的启动:当执行 ./a.out 命令时,操作系统会进行以下处理:
a. 操作系统加载可执行文件到内存中,并为其分配执行所需的资源。
b. 操作系统在加载可执行文件后,会定位可执行文件中的入口点(entry point)。入口点通常是一个特定的函数,如 main 函数。
c. 操作系...
c++ guide 其他/不好分类
所有权与指针相关
动态分配出的对象最好有单一且固定的所有主,并且通过智能指针传递所有权,优先考虑 unique_ptr
// perfer owning pointer over raw in virtual c'tor function
class Investment {
// ...
};
class Stock : public Investment {
// ...
};
class Bond : public Investment {
// ...
};
class RealEstate : public Investment {
// ...
};
template <typename... Ts>
std::unique_ptr<...
std::filesystem c++17 新特性
c++17新特性,带来filesystem
参考
https://en.cppreference.com/w/cpp/filesystem
https://zh.cppreference.com/w/cpp/filesystem
bazel 构建有什么特点
高效的增量构建:Bazel使用哈希算法对每个构建目标进行唯一标识,并跟踪每个目标的依赖关系。这使得在进行增量构建时,只有发生更改的目标及其依赖项会被重新构建,从而提高了构建速度。
多语言支持:Bazel支持多种编程语言,c++ python
声明式构建配置:Bazel使用BUILD文件来声明构建配置,这些文件描述了项目的结构、依赖关系和构建规则。通过声明式的配置,Bazel可以自动推断构建过程中的依赖关系,减少了手动配置的工作量。
时间同步 ntp ptp等
AVB 体系/协议框架
AVB 简介
http://blog.coderhuo.tech/2020/03/22/AVB_summury/
AVB被称为时间敏感网络,它主要解决两个问题
AVB协议族中的gPTP
AVB域内的每一个节点都是一个时钟,由以下两个角色组成:
一个主时钟(Grandmaster Clock),它是标准时间的来源;
其他的都是从时钟(Slave Clock),它们必须把自己的时间和主时钟调整一致
http://blog.coderhuo.tech/2020/04/05/gptp_summury/#2-%e4%b8%bb%e6%97%b6%e9%92%9f%e9%80%89%e5%8f%96
gPTP 和PTP关系
gPTP对PTPv2进行了简化...
c++ guide 函数相关
参数顺序相关
函数的参数顺序为: input -> input/output -> output
函数参数不超过5个
两种情况可能导致参数过多:
函数功能过于庞大, 可以拆分成多个小函数,方便单元测试和代码调试
隐藏了一个潜在的类,包含了这些参数
c++函数的输出一般通过返回值 提供,有时候通过输出参数提供
倾向于使用返回值。可读性好,否则的话按照引用返回,避免返回指针,除非他可以为null
第一个方法 MakePizza(Pizza& pizza) 通过引用参数传递 pizza 对象,并返回一个布尔值来表示制作披萨的结果。如果 busy 为假,则将 pizza 对象的属性设置为指定的值,并返回 true 表示制作成功。否则,返回 f...
c++ guide 类相关
构造函数的职责
不要再构造函数中调用虚函数,也不要在无法报出错误的时候进行可能失败的初始化
构造函数不应该调用虚函数,考虑一个工厂函数或者Init()方法
缺省实现的构造函数,操作符或者析构函数等,要用=default,或者=delete显式说明
=default 显式要求编译器生成函数的一个默认版本,对于构造函数而言(尤其是拷贝/移动构造函数中),可以减轻编码负担。
此外,使用=default还可以显示指定构造函数的权限,以及保持类的特性(如trivial、POD)。
隐式类型转换相关
不要定义隐式类型转换,对于转换运算符和单参数构造函数,用explict 关键字
不要提供隐式类型转换,可以用ToFloat() 等函数替代
隐式类型转换允许某一个类型的对象被用于另一...
c++ guide 作用域相关
命名空间相关
在.cc 文件内部使用匿名空间或者static声明
禁用 using namespace … 可以使用 using type alias
禁用 inline namespace
内联空间的名字可以被外部使用,和命名空间作用相违背
不要在头文件中定义空间别名
头文件中引入的namespace 都会成为公开api的一部分
src中,namespace 应该包裹住除了#include 宏定义和其他namespace中前置声明以外的所有代码
不要在std:: 空间声明任何东西,包括前置声明
做法的结果未被定义, 不好移植,要直接引用头文件
内部连接性相关
.cc 中定义一个不需要被外部引用的变量的时候,需要放在匿名空间或者static, 但.h 中不要这么...
共计 94 篇文章,12 页。