2022.4.23 看书笔记

2022.4.23 看书笔记,第1张

C++primer:

1.移动构造函数:它可以让动态内存的拷贝变成“移动”,免去了某些情况下的开销,是C++11的新特性。
2.C++11里容器可以保存不可拷贝的类型了,只要这些类型可以移动(例如unique_ptr)。
3.右值引用:写法是&&,可以绑定一个临时对象,而非一个局部对象,例如算数表达式。右值引用的对象都是马上要被
   销毁的对象,而且这些对象没有其他用户。形象地讲,用右值引用可以将一瞬的状态“窃取”下来。
4.虽然一个变量同时具有左值和右值的性质,但是毕竟它是永久的,所以无法被绑定到右值引用类型的变量上。
   例如一个右值引用类型的变量不能被另一个右值引用类型的变量绑定。
5.可以将左值显式地转化为对应的右值引用类型。
6.move(),提供给定对象作为参数,将返回其右值引用。它的作用是告诉编译器,希望将一个变量当成右值来用。
   在这之后这个变量可以被销毁和赋值,但是不能再用了。因为如果它是个真正的右值,它早就被销毁了。
   使用move()时要注意,建议写std::move()而且不使用using声明,因为存在潜在的命名冲突风险。
7.移动构造函数:外观上看,只有参数类型和拷贝构造函数不同。本质上看,它要负责移动对资源的控制权,
   而不是新建内存再拷贝。
8.将noexpect置于函数参数列表之后和初值列表之前,可以向编译器承诺该函数不会抛出异常,进而减少一些额外的开销。

*** 作系统导论:

1.分段的内存管理方式会使内存空间碎片化,时间久了分配内存会变得困难。因此引入分页。
2.分页:将一个进程的地址空间分割成若干固定大小的单元,每个单元是一页。相应的物理内存也分割成
   若干固定大小的单元,每个单元叫页帧。每个页帧包含一个虚拟内存页。
3.分页让内存管理更灵活,这样堆和栈的增长方向也不用规定了。
4.分页让内存管理更简单,需多少就从空闲列表直接分配多少。
5. *** 作系统为每个进程安排一个数据结构,里面有虚拟内存页与页帧的对应表,叫页表。
6.页表的前几位表示该进程的地址空间的哪一页,即虚拟页号(VPN),后几位表示偏移量。VPN要在 *** 作系统和硬件的
   协助下翻译成物理帧号(PFN),偏移量直接照搬,这样就得到了物理地址。
7.页表保存在内存里而不是寄存器里因为它实在太大了。
8.线性页表可以简单的看成一个map。它的键就是VPN。它的每一个值叫页表项(PTE),里面含有各种位和PFN。
9.有效位:进程的堆和栈中间的未使用部分在进程开始时都被标记为无效位,有无效位的虚拟页不会被分配物理帧,
   这样能节省大量内存。
10.保护位:表明页是否可以读写或运行。这样的话超过权限的访问会陷入 *** 作系统。
11.存在位:表示该页是否实际上在磁盘上。
12.脏位:表示该页是否在进程开始后被修改过。
13.参考位(访问位):用于确定页是否被访问,也用于发现页是否使用频繁,因此应该留在内存中。
14.分页的挑战之一是,如果不仔细设计硬件和软件,页表会让系统运行速度过慢并占用太多内存。

鸟哥的Linux私房菜:

相对路径是指相对于当前工作目录的路径。

大话设计模式:

1.依赖倒转原则:各种细节是不稳定的,而抽象是稳定的。所以要面向接口编程而不是面向实现编程。
2.里氏代换原则:子类必须能替换掉其父类。
3.子类拥有父类的全部非private行为和属性。只有这样父类才能够被复用,而子类也能够在父类的基础上增加新的行为。
4.根据依赖倒转原则,子类和父类不应该互相依靠,而是应该有一致的抽象或接口。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/733486.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-27
下一篇2022-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存