首页
Sterben_01
取消

算法相关

时间复杂度 时间复杂度主要就是看基本操作是啥,然后基本操作要进行几次 O1 int i = 1; int j = 2; ++i; j++; int m = i + j; 这代码操作都是执行一次。 On for(i=1; i<=n; ++i) { j = i; j++; } 我们能看到,for循环的代码会执行n次。所以消耗的时间是随着n变化而变化。所以是On...

智能指针

智能指针 我们不爱裸指针的原因: 裸指针的声明没办法告诉我们它指向的是单个对象还是数组。 没办法知道用完这个裸指针后要不要销毁它指向的对象。 没办法知道怎么销毁这个裸指针,是用operator delete还是什么其它自定义的途径。 参照原因1,没办法知道该用delete还是delete[],如果用错了,结果未定义。 很难保证调用路径上恰好销毁这个指针一次,可能内存...

操作系统相关

进程是进程是操作系统分配资源的最小单位。线程是程序执行的最小单位。 进程和线程资源共享: 线程共享的内容包括: 1.进程代码段 2.进程数据段(包括BSS段) 所以全局变量和静态变量是共享的。 3.进程打开的文件描述符 4.信号的处理器 5.进程的当前目录和 6.进程用户ID与进程组ID 7.堆 线程独有的内容包括...

初始化

聚合初始化 从 初始化器列表初始化聚合体。是列表初始化的一种形式。 (aggregate initialization)。聚合类型可以进行直接列表初始化。没有构造函数也可以初始化其中的参数。但是聚合类型有如下限制 1. 数组类型 或 2. 满足下列条件的类类型(通常是结构体(struct)或者联合体(union)): - 没有私有或保护的非静态数据成员 ...

Effective Modern C++ 笔记

Effective Modern C++ 笔记 条款18需要显式所有权的资源管理时,用std::unique_ptr 条款26 避免重载万能引用 2023.2.21:直接看模板的6.2 第一次看书给我看乐了。核心就一句话。根据C++的重载决议规则,万能引用版本总会被优先匹配。万能引用很jb贪。。它们会在具现过程中,和几乎任何实参型别都会产生精确匹配。而且在重载过程当中,万能引用模板还...

Malloc, brk 和 mmap

malloc, brk 和 mmap 这篇笔记可能存在错误,可能需要重新修改 malloc不是系统调用。是C库函数 看过侯捷老师的视频,我们都有内存池这个概念。但是malloc如何向系统申请内存? 我们仅用Linux下的方法说明。 malloc(1) 会分配多大的虚拟内存? malloc()在分配内存的时候,并不是老老实实按用户预期申请的字节数来分配内存空间大小,而是会预分配更...

C++杂记 - 2

C++杂记 - 2 关于delete this 能否在类的析构函数中调用delete this? 不能 实验告诉我们,会导致堆栈溢出。原因很简单,delete的本质是“为将被释放的内存调用一个或多个析构函数,然后,释放内存显然,delete this会去调用本对象的析构函数,而析构函数中又调用delete this,形成无限递归,造成堆栈溢出,系统崩溃。 能否在类的其它函数中调用d...

虚函数表

虚函数表 每个包含了虚函数的类都包含一个虚函数表。虚函数表是一个指针数组,其元素是指向虚函数的指针,每个元素对应一个虚函数的函数指针。需要指出的是,普通的函数即非虚函数,其调用并不需要经过虚表,所以虚表的元素并不包括普通函数的函数指针。 虚表是属于类的,而不是属于某个具体的对象,一个类只需要一个虚表即可。同一个类的所有对象都使用同一个虚表。 ...

王道操作系统笔记-内存内存(27)-- 内存管理9

王道操作系统笔记-内存内存(27)– 内存管理9 虚拟内存1 为什么需要虚拟内存 进程必须全部被放入内存后才可以运行。但是如果进程的大小大于内存的容量,或者是内存中同时运行多个进程的话怎么办?我们可以通过覆盖这种方式来解决(之前笔记有。类似于c++内存管理使用union实现的嵌入式指针),但是需要让程序员做很多工作。所以我们可以通过逻辑上去扩充内存。 从逻辑上去扩充内...

王道操作系统笔记-内存内存(26)-- 内存管理8

王道操作系统笔记-内存内存(26)– 内存管理8 非连续分配管理方式(3)基本段页式存储管理 分页和分段的优缺点分析 如果系统采用分页式,则每个进程都有一个自己的页表。如果系统采用分段式,则每个进程都有一个自己的段表。如果系统采用段页式,则每个进程都有一个自己的段表。而每一个段都会有一个页表,所以是一个段表和多个页表。 “分段”对用户是可见的,程序员编程时需要显式地给出段号、...