程序常量区 栈区

今天在思考一个问题,随手记一下:

int Test(int n)
{
    int a=1,b=2;
    int c = 0;
    for(int i=1;i<n;i++)
    {
        c = a + b + i;
    }

    return c;
}

int a = 1,b = 1;

int c = a+b;

问a ,b,c对应的值在内存中存储是怎么样的?

答案是a,b,c三个运行时变量存储在栈区,但是由于a,b这两个变量的值1和2在编译期间就已经确定了所以a,b两个变量时运行时在栈上分配的 但是1,2这两个值是编译器就在常量区分配好了的 也就是说程序一运行(不管int a=1,b=2;运行不运行) 在常量区就存在了1和2 ,但是c是由a+b得到的所以c的值也是在计算a+b后得到一个临时变量(这个变量程序不可见也无法修改就像int a = Func()一样系统会先计算Func()然后使用一个临时看不见不可操作的变量来记录这个值 待赋值到a后释放这个不可见变量 int c=a+b也是一样的原理)

所以这个过程即使循环n次那么常量区只是有一份1,2栈区只是有一份int 来计算a+b时间复杂度是O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值