zoukankan      html  css  js  c++  java
  • 内存四区模型

    注:一个程序只建立一个内存四区,所有函数共用这个内存四区。

    内存四区如下:

    一、全局区

    全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量在一块区域,

    未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,

    该区域在程序结束后由操作系统释放; 

        常量区——字符串常量和其他常量的存储位置,程序结束后由操作系统释放。

        在代码运行期间,C编译器会做优化处理,

    1)、当定义两个不同字符串时,全局区会开辟两个内存空间存放字符串,

    2)、当定义两个相同的字符串时,全局区只开辟一个内存空间,变量共用这个内存空间。

    二、堆

    一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能有操作系统回收;

    函数内部动态分配内存空间,其他函数可以使用,因为在该函数运行结束后,这片内存空间不被释放。

    三、栈(临时区)

      由编译器自动分配释放,存放函数的参数值,局部变量的值等;

      函数内部静态分配内存空间,其他函数不能使用,因为在该函数运行结束后,这片内存空间被释放掉了。

    四、代码区

     存放函数的二进制代码;

    栈区开口朝向问题:

    #include <stdio.h>
    
    void main(void){
        int i=10;
        int j=10;
        printf("i-->%d;
    ",&i);
        printf("j-->%d;
    ",&j);
        if((&i-&j)>0){
            printf("开口朝下;
    ");
        }else if ((&i-&j)<0){
            printf("开口朝上;
    ");
        }else{
            printf("error;
    ");
        }
        return ;
    }

    无论栈区开口朝上还是朝下,栈区内的数组内存空间的开头地址都是最下面的,如图:

  • 相关阅读:
    mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
    java:JDBC详解
    卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)
    卷积(转自wiki百科)
    windows10环境下安装Tensorflow
    3、继承与派生
    2、对象和类
    1、从C语言到C++
    使用Jupyter Notebook编写技术文档
    3、利用GDB进行程序调试
  • 原文地址:https://www.cnblogs.com/xiaotaoqi/p/5920325.html
Copyright © 2011-2022 走看看