• 一、内存


    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指令存储在代码区
  • 相关阅读:
    根据第三方提供的wsdl报文(axis2开发),进行的webservice应用的开发实例
    调用axis2开发的接口遇到的问题
    使用 DJ Java Decompiler 将整个jar包反编译成源文件
    解析Myeclipse项目下的.classpath文件
    使用cxf开发webservice应用时抛出异常
    hibernate 映射 多对一
    jquery获取元素的值,获取当前对象的父对象等等
    web项目中加入struts2、spring的支持,并整合两者
    Struts2中的 配置文件
    对list集合中的对象按照对象的某一属性进行排序
  • 原文地址:https://www.cnblogs.com/gnhxsk/p/5168598.html
Copyright © 2020-2023  润新知