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指令存储在代码区
  • 相关阅读:
    1012 The Best Rank (25 分)(排序)
    1011. World Cup Betting (20)(查找元素)
    1009 Product of Polynomials (25 分)(模拟)
    1008 Elevator (20 分)(数学问题)
    1006 Sign In and Sign Out (25 分)(查找元素)
    1005 Spell It Right (20 分)(字符串处理)
    Kafka Connect 出现ERROR Failed to flush WorkerSourceTask{id=local-file-source-0}, timed out while wait
    flume、kafka、avro组成的消息系统
    Java23种设计模式总结【转载】
    Java编程 思维导图
  • 原文地址:https://www.cnblogs.com/gnhxsk/p/5168598.html
Copyright © 2011-2022 走看看