static inline 内存分区模型

static

        scene:想将函数中某一变量的值(函数)保存至下一次调用时,且将其访问范围得到限定(即便是 extern 外部声明也不可以)。在程序结束后释放,不占用内存。

        static 函数:可在只允许在一个编译单位(某一文件)内使用的某个函数,其他不能进行访问跟调用。

        static 变量:在程序开始运行时就存在(完成初始化),在某一限定范围内   

        注:因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。即存储在静态存储区而非栈区。

扩展:内存分区模型

        C++程序在执行时,将内存大方向划分为4个区域

  • 代码区:存放函数体的二进制代码,由操作系统进行管理的
  • 全局区:存放全局变量和静态变量以及常量
  • 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
  • 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

程序运行前

        在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域.

        代码区

        存放 CPU 执行的机器指令
        代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
        代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令.

        全局区

        全局变量和静态变量存放在此.
        全局区还包含了常量区、字符串常量和其他常量也存放在此.
        该区域的数据在程序结束后由操作系统释放.

程序运行后
        栈区

        由编译器自动分配释放,存放函数的参数值、局部变量等
        注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

        堆区

        由程序员分配释放,若程序员不释放,程序结束时由操作系统回收
        在C++中主要利用new在堆区开辟内存        

inline

        scene:每次函数调用时执行一定的时间和空间的开销。而在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题。为了提高程序的运行效率,将功能简单、使用频繁的函数声明为inline以减少函数调用的开销。编译时用内嵌函数体的代码代替函数调用语句,并用实参代替形参。

        e.g

               inline double add(double x, double y) { return (x+y); }

               int main ()

               {

                   double a=2.7,b=3.3;

                   cout<<add(a+b)<<endl;

                   return 0;

               }

               在上述代码中,当编译去遇到add(a,b)时,被替换成(a+b)

        使用限制:只适用于简单的程序(循环语句、开关语句、递归调用等不行)。

        注意:

        1.inline仅是一个对编译器的建议,是否执行inline,得看编译器的意思;

        2.类内定义的函数即使不带inline关键字,也是inline函数;

        3.的确可以节省运行时间,但却使程序的目标代码量增加;

        4.因其定义应出现在被调用之前,并且在调用该函数的每个文本文件中都要进行定义。所以一般将incline函数的定义放在头文件中,使用时仅需用“#include”包含该头文件。

        

       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值