vdso
amd和intel使用了不同的指令来优化系统调用(int 80?)
为了统一,在linux上使用vdso这个中间层
此外,vdso能优化那些看上去没必要陷入内核的调用,如时间
auxv
在linux的进程初始化之后的栈上,在env之后还有一系列变量
调用约定
caller-stored
调用者caller保存,在函数调用之前由caller入栈保存
可以被callee直接自由使用
callee-stored
被调用者callee在使用这些寄存器之前入栈保存
数组到指针的隐式转换
int[]可以隐式转换成int*,即数组名自动转换为指向数组第一个元素的指针,除此以外的事不会发生,如以下:
int[a][b]可以隐式转换成int(*)[b],但不能int**
int**和int[a][b]的内存布局是完全不同的