进程的虚拟内存空间
操作系统给每个进程营造一种假象,即独占整个内存。在 x86 系统中,为每个进程虚拟出 4G 的内存空间,其中 3G 为用户空间,这块空间各进程相互独立;1G 为内核空间,这块空间进程间共享
第一章:Asio 建立网络连接基本 API
只涉及让客户端和服务端建立连接,数据通信会在第二章讲解,即同步和异步两种方式
生成可执行文件的过程
要想深刻理解从源代码到可执行文件的过程,那就去实现一个编译系统,实现一个简易版的即可。也许我后面有机会去做这个事情,但不知道会不会有这个空闲了
i++ 和 ++i 的区别
i++ 本身并不立即自增,返回值为 i 本身的原始值。++i 本身立即自增,返回值为 i + 1
类型转换
防止隐式类型转换带来的不确定性,显示转换带来的精度丢失问题
变量和常量
数据类型定义字节大小,变量名是内存地址的别名,存储实际数据。这个内存地址是存储实际数据的起始地址,而数据类型的字节大小就表明从这个起始地址开始读取的字节大小,这样就能够找到对应存储的实际数据,不会多读,也不会少读
宏定义和宏函数
主要就是谈一谈宏定义和宏函数容易出错的地方,由于只是单纯的文本替换,且不支持和调试,导致在写代码期间是无法排查的,这就需要我们能够知道哪些地方容易出错,好在后续使用过程中不容易犯错
策略模式
在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码
第五章:文件系统
文件系统这一章没有前面几章易读,个人在学习过程中没有感觉到乐趣,也不知道是不是文件系统本身无趣,还是作者的写作内容需要改进呢?
第四章:并发
同一进程下的多线程共享内存地址,对同一块内存地址的读不会引发数据竞争,但是修改会引发数据竞争。常用的办法是加锁保护临界区或保证修改的动作是原子的
167891012