zoukankan      html  css  js  c++  java
  • 局部变量存储区域静态变量存储区域static变量存储区域

    常见的存储区域可分为:

    1、栈

    由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

    2、堆

    由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,程序会一直占用内存,导致内存泄漏,在程序结束后,操作系统会自动回收。

    3、自由存储区

    由malloc等分配的内存块,它和堆是十分相似的,不过它是用free来释放分配的内存。

    4、全局/静态存储区

    全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

    5、常量存储区

    这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)。

     

    例1:C语言程序

    1. int x;  
    2. void main()  
    3. {  
    4. }  

    变量x存储在内存哪个区域?

    答:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。

    BSS是英文Block Started by Symbol的简称。BSS段属于静态存储区

     

    例2:static全局变量与普通全局变量有什么区别?

    答:static全局变量和普通全局变量存储区域相同,不同的是:

    static全局变量只在声明此static全局变量的文件中有效;

    普通全局变量对整个源程序都有效,当此源程序包含多于一个文件的程序时,对其他文件依然有效。

     

    例3:static局部变量与普通局部变量的区别?

    答:static局部变量的存储区为静态存储区,普通局部变量的存储区为栈;

    static局部变量生存周期为整个源程序,但是只能在声明其的函数中调用,并且其值与上一次的结果有关;而普通局部变量的生存周期为声明其函数的周期,超过特定的范围其值会被重新初始化;

    static局部变量如果未初始化其值默认为0,而普通局部变量则不确定。

    转自http://blog.csdn.net/xl890727/article/details/12657073

  • 相关阅读:
    POJ1475 Pushing Boxes 华丽丽的双重BFS
    POJ3322 Bloxorz I 无脑广搜(我死了。。。)
    CH2401 送礼物 双向搜索
    POJ2248 Addition Chains 迭代加深
    POJ3074 Sudoku 剪枝深(神?)搜
    Luogu P1120 小木棍 [数据加强版] 来来来我们一起来剪枝,剪枝,剪枝、、、
    Luogu P4095 [HEOI2013]Eden 的新背包问题 思维/动规
    Luogu P5201 [USACO19JAN]Shortcut 最短路树???
    Luogu P5122 [USACO18DEC]Fine Dining 最短路
    Luogu P1608 路径统计 最短路计数
  • 原文地址:https://www.cnblogs.com/wuyuankun/p/3675996.html
Copyright © 2011-2022 走看看