编译期初始化与运行期初始化

编译期初始化:在源代码被编译过程中,编译期安插一些代码逻辑,完成确定的内存分配(并非实际分配内存,而是确定其大小占用,由编译期安插代码),变量的初始化。如:全局变量为内置类型,并且大小确定int a=2; static int b=3; //static的不同只是其只在本文件中可见static int c=a+b;在编译期初始化,那么在实际运行期都是确定的结构和逻辑,将带来更高的性能,因为编译器完成了一定的工作。加载时初始化:在main()函数执行前,完成包括全局变量,..
摘要由CSDN通过智能技术生成

编译期初始化:在源代码被编译过程中,编译期安插一些代码逻辑,完成确定的内存分配(并非实际分配内存,而是确定其大小占用,由编译期安插代码),变量的初始化。

 

如:全局变量为内置类型,并且大小确定

int a=2; 
static int b=3;   //static的不同只是其只在本文件中可见
static int c=a+b;

在编译期初始化,那么在实际运行期都是确定的结构和逻辑,将带来更高的性能,因为编译器完成了一定的工作。

 

加载时初始化:在main()函数执行前,完成包括全局变量,静态变量的初始化:

例如全局的类对象:

class A
{
public:
    virtual void fun()
    {
        cout<<"funciton A:fun() call"<<endl;
    }


};
A a;//将在main执行前,加载时初始化

int main()
{

......

全局类对象在main函数执行前,由加载程序完成其初始化,其无法在编译期初始化,由于那时候还无法调用类的构造函数。

同时,在加载期,是线程安全的。例如,饿汉方式的单例类:

借助main执行前的加载期完成

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值