zoukankan      html  css  js  c++  java
  • 一、内存

    1.内存分区:
    高(内存地址大)  栈底      栈区         
                                                堆区                                          
                                                静态区
                                                常量区
    低(内存地址小)               代码区
    2.栈:数据结构
    (1)特点:先进后出
    (2)操作:入栈(push)出栈(pop)
    (3)栈从高->低分配空间
    char a = 0;
    char b = 0;
    char c = 0;
    printf(“a:%p ”,&a);
    printf(“b:%p ”,&b);
    printf(“c:%p ”,&c);
    (4)栈从低->高使用
    char n1 = 1;
    char n2 = 0;
    short *p = &n2;
    printf(“%d ”,*p);
    (5)函数:每一个函数,系统都会分配栈
    int fun1(){
         int n1 = 200;
         return n1;
    }
    int fun2(){
         int n1;
         return n1;
    }
    int main(){
         fun1();
         int m = fun2();
         printf(“%d ”,m);
    }
    主函数分配栈后,执行到fun1,再分配栈,该函数执行完毕后,标记n1被删除,但是数据被保留;执行到fun2,有标记相同,获得上一个栈保留的数据;然后,m拷贝数据,输出m=200.
    (6)等号由右向左执行
    (7)标记删除(不删除数据)
    (8)内存机制:数据不会清除,只是覆盖
    (9)注意:写变量要赋初值
    (10)系统分配以及回收内存
    (11)函数体内创建的变量分配在栈区
    int a = 10;//a存放在内存的栈区(当出了花括号则系统回收)
    3.堆区
    (1)动态内存分配,
    (2)关键字malloc ,释放内存free();
    (3)由用户(程序员)分配和回收,如果程序员未回收内存,那么内存就会越用越少,有可能导致内存不够用,程序崩溃。如果没有达到不够用,程序安然无恙。
    (4)当程序退出时,堆内存由系统回收(关键字free)
    4.静态区(全局区)
    (1)定义在函数体外面的变量,由系统开辟空间,程序运行过程一直都在,直到程序退出,由系统回收。
    (2)变量不定义在任何函数体内
    int x = 8;//x存放在静态区
    int main(){
    };
    (3)特点:①只初始化一次②如果初始化时未赋初值,默认值为0③静态变量的空间只有程序退出才释放(程序运行期间永远存在)
    (4)目的:①延长变量生命周期②不增大该变量的作用域
    (5)关键字:static
    for(int i = 0 ; i < 5 ; i ++){
        // int m = 0;
        static int m  = 0;//判断在静态区是否存在变量,结果等同于将int m = 0放在for循环外面
         printf(“%d ”,m++);
    }
    5.常量区
    (1)常量区的数据存储在常量区,常量区的内容不可更改
    (2)浮点数,整型数,字符数
    int a = 10;//10存在常量区
    6.代码区
    (1)存放源代码的编译区。所有写的代码,函数编译成二进制放在代码区
    (2)所有的语句编译后生成的CPU指令存储在代码区
  • 相关阅读:
    Oracle学习(四)--sql及sql分类讲解
    Oracle学习(三)--数据类型及常用sql语句
    Oracle学习(二)--启动与关闭
    Tomcat学习笔记--启动成功访问报404错误
    有关Transaction not successfully started问题解决办法
    百度富文本编辑器UEditor1.3上传图片附件等
    hibernate+junit测试实体类生成数据库表
    js登录与注册验证
    SVN安装配置与使用
    [LeetCode] #38 Combination Sum
  • 原文地址:https://www.cnblogs.com/gnhxsk/p/5168598.html
Copyright © 2011-2022 走看看