首页
Sterben_01
取消

Effective STL 笔记

Effective STL 笔记 第二条:不要试图编写独立于容器类型的代码。 STL 是以泛化原则为基础的: 数组被泛化为”以其包含的对象的类型为参数“的容器; 函数被泛化为”以其使用的迭代器的类型为参数“的算法; 指针被泛化为”以其指向的对象的类型为参数“的迭代器; 容器被泛化为”序列式和关联式“容器。 个人理解一句话:别给多个容器写一个通用的函数。没有意义而且...

算法相关

时间复杂度 时间复杂度主要就是看基本操作是啥,然后基本操作要进行几次 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)。聚合类型可以进行直接列表初始化。没有构造函数也可以初始化其中的参数。但是聚合类型有如下限制 聚合(Aggregate) 聚合属于以下类型之一: 数组类型(array types) 类类型,并满足下列条件: ...

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实现的嵌入式指针),但是需要让程序员做很多工作。所以我们可以通过逻辑上去扩充内存。 从逻辑上去扩充内...