C 语言的函数是从下(低地址)向上(高地址)压入堆栈的,如下图所示:
栈底 高地址
| .......
| 函数返回地址
| .......
| 函数最后一个参数
| ......
| 函数第一个可变参数 <--va_start后 ap指向
| 函数最后一个固定参数
| ......
| 函数第一个固定参数
栈顶 低地址
栈底 高地址
| .......
| 函数返回地址
| .......
| 函数最后一个参数
| ......
| 函数第一个可变参数 <--va_start后 ap指向
| 函数最后一个固定参数
| ......
| 函数第一个固定参数
栈顶 低地址