c++对象模型研究6:执行期
2016-06-20 20:23
671 查看
C++的一件困难事情:不太容易从程序代码看出表达式的复杂度。
执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。
一般而言,我们会把对象尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和摧毁操作(主要是析构)。不建议把所有的对象放在函数或某个区段的起始处。
全局对象
对于全局变量,C++会保证在调用全局变量之前,将全局变量构造出来。
而所有的全局变量都被放置在程序的数据段中(data segment),并且为没有显示指定值的变量初始化为0。
同时对于全局的类对象,在编译时期被放置于data segment中并且内容也为0.只有在程序启动时其对应的constructor才会实施。因此object需要静态初始化。
静态初始化的munch策略:
1.为每个需要静态初始化的文件产生一个_sti()函数,内含必要的constructor调用操作和inline expansions。
2.为每一个需要静态的内存释放操作的文件,产生一个_std()函数。
3.提供一个_main()函数调用所有的_sti()函数,一个_exit()函数调用所有的_std()函数
局部静态对象
参考:
《深度探索C++对象模型》
http://blog.csdn.net/zone_programming/article/details/50411511
执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。
对象的构造和析构
一般而言,我们会把对象尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和摧毁操作(主要是析构)。不建议把所有的对象放在函数或某个区段的起始处。全局对象
对于全局变量,C++会保证在调用全局变量之前,将全局变量构造出来。
而所有的全局变量都被放置在程序的数据段中(data segment),并且为没有显示指定值的变量初始化为0。
同时对于全局的类对象,在编译时期被放置于data segment中并且内容也为0.只有在程序启动时其对应的constructor才会实施。因此object需要静态初始化。
静态初始化的munch策略:
1.为每个需要静态初始化的文件产生一个_sti()函数,内含必要的constructor调用操作和inline expansions。
2.为每一个需要静态的内存释放操作的文件,产生一个_std()函数。
3.提供一个_main()函数调用所有的_sti()函数,一个_exit()函数调用所有的_std()函数
局部静态对象
参考:
《深度探索C++对象模型》
http://blog.csdn.net/zone_programming/article/details/50411511
相关文章推荐
- c语言学习之数据类型
- c语言第二次作业
- KNN算法C++实现
- c++实践参考:两个成员的类模板(二)
- c++实践参考:两个成员的类模板
- leetcode_337 House Robber III
- c++实践参考:排序函数模板
- 【C++】泛型编程基础:模板通识
- C++之cin.ignore, cin.peek, cin.putback
- C++之cin.getline
- [leetcode] 【排序】 75. Sort Colors
- C语言 学生宿舍管理系统
- C++实现快速排序(源代码)
- c++ byte 转 int(C++基本类型整形)
- c语言第一次作业
- 【转】C++ vector的使用
- C#调用C/C++动态库 封送结构体,结构体数组
- [leetcode] 【排序】 41. First Missing Positive
- C语言 学生宿舍管理系统
- C语言应用-飞机游戏