Effective Modern C++ 笔记 条款18需要显式所有权的资源管理时,用std::unique_ptr 条款26 避免重载万能引用 2023.2.21:直接看模板的6.2 第一次看书给我看乐了。核心就一句话。根据C++的重载决议规则,万能引用版本总会被优先匹配。万能引用很jb贪。。它们会在具现过程中,和几乎任何实参型别都会产生精确匹配。而且在重载过程当中,万能引用模板还...
malloc, brk 和 mmap 这篇笔记可能存在错误,可能需要重新修改 malloc不是系统调用。是C库函数 看过侯捷老师的视频,我们都有内存池这个概念。但是malloc如何向系统申请内存? 我们仅用Linux下的方法说明。 malloc(1) 会分配多大的虚拟内存? malloc()在分配内存的时候,并不是老老实实按用户预期申请的字节数来分配内存空间大小,而是会预分配更...
C++杂记 - 2 关于delete this 能否在类的析构函数中调用delete this? 不能 实验告诉我们,会导致堆栈溢出。原因很简单,delete的本质是“为将被释放的内存调用一个或多个析构函数,然后,释放内存显然,delete this会去调用本对象的析构函数,而析构函数中又调用delete this,形成无限递归,造成堆栈溢出,系统崩溃。 能否在类的其它函数中调用d...
虚函数表 每个包含了虚函数的类都包含一个虚函数表。虚函数表是一个指针数组,其元素是指向虚函数的指针,每个元素对应一个虚函数的函数指针。需要指出的是,普通的函数即非虚函数,其调用并不需要经过虚表,所以虚表的元素并不包括普通函数的函数指针。 虚表是属于类的,而不是属于某个具体的对象,一个类只需要一个虚表即可。同一个类的所有对象都使用同一个虚表。 ...
王道操作系统笔记-内存内存(27)– 内存管理9 虚拟内存1 为什么需要虚拟内存 进程必须全部被放入内存后才可以运行。但是如果进程的大小大于内存的容量,或者是内存中同时运行多个进程的话怎么办?我们可以通过覆盖这种方式来解决(之前笔记有。类似于c++内存管理使用union实现的嵌入式指针),但是需要让程序员做很多工作。所以我们可以通过逻辑上去扩充内存。 从逻辑上去扩充内...
王道操作系统笔记-内存内存(26)– 内存管理8 非连续分配管理方式(3)基本段页式存储管理 分页和分段的优缺点分析 如果系统采用分页式,则每个进程都有一个自己的页表。如果系统采用分段式,则每个进程都有一个自己的段表。如果系统采用段页式,则每个进程都有一个自己的段表。而每一个段都会有一个页表,所以是一个段表和多个页表。 “分段”对用户是可见的,程序员编程时需要显式地给出段号、...
王道操作系统笔记-内存内存(25)– 内存管理7 非连续分配管理方式(2)基本分段存储管理 每一个进程都有一个自己的段表 这个其实说回来和分页差不多。只不过分段机制是按照自身逻辑来划分的。每一个段有一个段名。每段从0开始编址。 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。 内存分配规则:以...
王道操作系统笔记-内存(24)– 内存管理6 TLB 页表保存在主内存中。 Page-table base register (PTBR) points to the page table.(页表基址寄存器指向页表) Page-table length register (PRLR) indicates size of the page table.(页表限长寄存器表明页表...
拷贝构造 调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。 如果产生了新的对象实例,那调用的就是拷贝构造函数;如果是对已有的对象赋值,调用的是拷贝赋值。 比如 P a = P(10); //这是拷贝构造。因为a还不存在。 //------------------------------------------------------ P a; a = P(1...
C++ 杂记 拷贝初始化,拷贝构造 直接初始化。 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 class ClassTest 5 { 6 public: 7 ClassTest() 8 { 9 c[0] = '\0'...