• C语言——内存分配


    1、在C语言的运行过程中,需要内存来存储数据。C语言使用的内存总体可以分为两类:一类是静态区,一类是动态区。
    2、静态数据存储区包含:只读数据区、已初始化的读写数据区、未初始化的读写数据区
         动态数据存储区包含:堆内存区域、栈内存区域
         
    3、C语言编写的程序经过编译-连接之后,将形成一个统一的文件,它由几个部分组成:
          代码段(code或text)、只读数据段(RO data)、宏定义、已初始化读写数据段(RW data)、未初始化读写数据段(BSS)、堆(heap)、栈 (stack)
    代码段:        由各个函数产生,函数的每一条语句最终都生成机器码,例如普通的数学运算、条件语句、循环语句
    只读数据段: 由程序使用的数据产生,该部分数据的特点是不需要修改,因此被放入只读部分;
    例如:只读全局变量  const char a[10] = "hello!!!";   只读局部变量  const char str[8] = "world";  程序中使用的常量 printf("ni hao c ");  "ni hao c "就被放入只读数据区
    4、已初始化数据段,又称为读写数据段,它里面的变量可读可写,
    例如:  已初始化的全局变量 int a = 10;     以初始化的局部静态变量,在函数体内定义 static int num = 10;
    5、未初始化数据段,该段的数据没有初始化,它只在目标文件中被标识,并不会称为一个真正的段。只有在程序运行的初始化阶段才会产生,因此不会影响目标文件大小
    6、堆    只在程序运行的过程中出现,一般由程序员分配和释放
    7、栈    只在程序运行的过程中出现,在函数内部使用的变量、函数的参数以及返回值将使用栈空间
         栈的特点是先进后出
         栈的增长方式有2种:一种是向上增长的,即从低地址向高地址增长;一种是向下增长的,即从高地址向低地址增长。目前绝大多是系统是递减的
         根据栈的指针位置又可以讲栈分为满栈和空栈。
         按照满栈的处理情况:入栈的时候,入栈内容放在栈指针移动后的内存地址;出栈的时候,将弹出当前栈指针地址的内容
         按照空栈的处理情况:入栈的时候,入栈内容放在当前栈指针的内存地址中;出栈的时候,将弹出栈指针移动后地址的内容


              

    http://blog.chinaunix.net/uid-29958512-id-4584209.html

  • 相关阅读:
    在 Win7 下使用 VS2005 编译 Chrome
    C++ Qt 05:Qt布局管理器 荒 木 博客园
    电商们都挺贼的,便宜的东西都不肯卖,比如牙膏,谁要用一支20多的呀,3-4块的中华没人进货,
    python 下载 国内
    爱慕集团以及爱慕在线科技有限公司简介 Aimerman
    Build Instructions (Windows) The Chromium Projects
    C++ Qt 03:MainWindow和Qt Gui编程
    今天 穿vancl的衣服撞衫了,ooooooooppppppppppppppps
    2006年世界杯小组赛日程表
    C++ 虚函数表解析
  • 原文地址:https://www.cnblogs.com/qq1129496211/p/4063104.html
Copyright © 2020-2023  润新知