栈&调用约定&函数默认值&inline函数

.data存放已初始化但初始化不为0的数据

.bss存放未初始化或初始化为0的数据

强弱符号

强符号:已初始化的全局变量

弱符号:未初始化的全局变量

规则:

1、两强符号——重定义错误

2、一强一弱,选强符号

3、两弱符号,针对编译器不同选择不同

函数堆栈调用:

move   移值  lea  移地址

四个寄存器:eax  ebx  ecx  edx

ebp 栈底指针寄存器   esp  栈顶指针寄存器   pc  下一行指令寄存器

栈:函数活动所需要的空间 ; 栈帧:一个函数所需要的空间

 1、被调用函数用完成后退回到调用方栈帧的原因

进入被调用栈后,压入了调用方ebp的值

2、被调用函数调用完成后怎么知道沿下一行指令继续执行

函数的调用时压入下一行指令地址

3、形参有无开辟内存,谁开辟的

形参有开辟内存,调用方开辟且清理的

调用约定:1、函数的符号生成   2、入栈顺序  3、形参的开辟和清理方式

c的标准调用约定 __cdecl     调用方开辟调用方清理

windows的标准调用约定__stdcall  调用方开辟  被调用方清理

快速调用约定:__fastcall  前两个实参 调用不开辟形参内存,第三个参数起__stdcall调用

c++类成员方法的调用约定:__thiscall
函数的默认值:

1、自右向左依次赋值,自左向右匹配

2、默认值不能重复赋值

3、一般给在声明上

函数的重载三要素:

  1、同名

  2、形参不同:(1)形参类型不同(2)形参的个数不同(3)形参的顺序不同

   3、同作用域

inline函数:在函数的调用点直接展开代码

inline函数和普通函数的区别:

普通函数有开栈和清栈 ,inline函数无清栈开栈

inline函数占据空间庞大,以空间换时间

执行开销<调用开销  可以用inline函数

执行开销>调用开销  不建议用inline函数

inline函数和宏的区别:

inline:编译     有类型检查和安全检查

宏:预编译     无类型检查与安全检查

inline函数的注意事项:

1、inline函数一般写在头文件下

2、inline函数只在relese版本下生效

3、给编译器的一个建议,是否展开由编译器决定

4、inline是基于实现的不是基于声明的

猜你喜欢

转载自blog.csdn.net/post_joke/article/details/86258342
今日推荐