《程序员的自我修养》阅读笔记(三):
第4部分 库与运行库
第10章 内存
函数调用惯例。函数返回值通常保存在寄存器eax,然后由调用者读取,对5-8字节返回值,通常由eax保存低4位,edx保存高4位。而返回值大于8字节时,调用过程大致如下:
声名狼藉的C++返回对象。为此,C++提出了返回值优化(Return Value Optimization,RVO)这样的技术。
Linux下两种堆空间分配方式,即两个系统调用:brk()系统调用和mmap()。
第12章 系统调用与API
中断。中断号对应中断处理程序(Interrupt Service Routine,ISR),这种对应通过中断向量表。
中断号有限,不一一对应。用户将系统调用号放入eax,然后使用int 0x80调用中断,中断服务程序就可以从eax里取得系统调用号,进而调用对应的函数。
插入: SS, SP, BP 三个寄存器
SS:存放栈的段地址;
SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址;
BP: 基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到。比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.
用户态到内核态的切换:
软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)。
第13章 运行库实现
操作符函数。new、delete、+、-、*等都有对应操作符函数。
全局操作符重载;也可以重载某个类的new、delete。