摘要: linux 内核在编译的时候会初始化一个静态的临时的 全局页目录(page global directory) 和一个 页表(page table)。初始化是在 arch/i386/kernel/head.S 中的 startup_32 汇编函数中初始化的。这个还包含了其他的初始化部分,因此,只截取 阅读全文
posted @ 2023-03-27 20:52 atorli 阅读(295) 评论(0) 推荐(0)
摘要: 在 C 和 C++ 中,有两种头文件包含方式,引号和尖括号形式,这两种形式的搜索路径是不一样, 搜索路径的顺序如下所示: 对于引号形式的 include 指令,会首先搜索包含当前文件的目录 对于引号形式的 include 指令,通过 -iquote 选项指定的目录将会以从左往右的顺序进行搜索。 通过 阅读全文
posted @ 2023-03-23 20:45 atorli 阅读(261) 评论(0) 推荐(0)
摘要: 什么是 e820? e820 是 BIOS 用来报告物理内存分布的一个基础设施。因此,e820 是一个很重要的东西,它报告了那些物理内存范围是可用的,那些范围是预留的。 e820 流程分析 linux 获取内存分布从 machine_specific_memory_setup 函数开始,这个函数在多 阅读全文
posted @ 2023-03-13 09:24 atorli 阅读(538) 评论(0) 推荐(0)
摘要: 在一个类的定义中,关键字 static 声明一个不属于类实例的成员。 一些细节 如果类定义中某个成员的声明说明符包含关键字 static,那么它就是类的静态成员。静态成员的名称不能和包含的类相同。 需要注意的是,在类定义中声明的静态变量是一个声明而不是定义,并且成员可以是一个不完整类型(除了void 阅读全文
posted @ 2023-02-17 15:04 atorli 阅读(110) 评论(0) 推荐(0)
摘要: 当没有通过初始化器构造一个对象时,那么将会执行默认初始化。 语法 T object new T 默认初始化出现在以下几种情况中: 当一个自动,静态,或者线程存储周期的变量声明时没有初始化器。 当通过 new 创建一个没有初始化器的动态存储周期的对象。 当一个基类或者非静态成员没有在构造器初始化列表中 阅读全文
posted @ 2023-02-12 09:47 atorli 阅读(185) 评论(0) 推荐(0)
摘要: C++ 中 shared_ptr 对象之间可以共享对象的拥有权,但是这种共享的对象引用在某些情况下可能会引发一些问题。例如,循环引用会造成两个对象之间相互引用,无法删除对象。 一个循环引用的例子 class bar; class foo { public: foo() { } std::shared 阅读全文
posted @ 2023-02-07 21:50 atorli 阅读(612) 评论(0) 推荐(0)
摘要: C++ 中表达式的值类别 C++ 中的表达式有两个属性,分别是值类型(type)和值类别(value category),每个表达式都有着某些非引用类型,且每个表达式都属于三种主要的值类别之一,这三种值类别分别是:左值(lvalue),纯右值(prvalue),将亡值(xvalue)。 泛左值(gl 阅读全文
posted @ 2023-02-07 18:40 atorli 阅读(202) 评论(0) 推荐(0)
摘要: 浮点数的二进制表示 在理解二进制浮点数的表示之前,首先先从十进制的浮点数表示开始,十进制的浮点数表示如下 $$ d_{m}d_{m-1}...d_{1}d_{0}.d_{-1}.d_{-2}...d_{-n} $$ 每一个十进制数字$d_{i}$的范围为$[0,9]$。这个十进制浮点数表示法的值为 阅读全文
posted @ 2023-02-03 20:49 atorli 阅读(265) 评论(0) 推荐(0)
摘要: 值初始化语法 C++ 中的值初始化语法有以下几种形式 T() new T() Class:Class(...):member(){...} T object{} T{} new T{} Class::Class(...):member{}{...} 其中第4,5,6,7几种语法是从 C++11 之后 阅读全文
posted @ 2023-02-02 15:30 atorli 阅读(155) 评论(0) 推荐(0)