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\n");  "ni hao c\n"就被放入只读数据区
4、已初始化数据段,又称为读写数据段,它里面的变量可读可写,
例如:  已初始化的全局变量 int a = 10;     以初始化的局部静态变量,在函数体内定义 static int num = 10;
5、未初始化数据段,该段的数据没有初始化,它只在目标文件中被标识,并不会称为一个真正的段。只有在程序运行的初始化阶段才会产生,因此不会影响目标文件大小
6、堆    只在程序运行的过程中出现,一般由程序员分配和释放
7、栈    只在程序运行的过程中出现,在函数内部使用的变量、函数的参数以及返回值将使用栈空间
     栈的特点是先进后出
     栈的增长方式有2种:一种是向上增长的,即从低地址向高地址增长;一种是向下增长的,即从高地址向低地址增长。目前绝大多是系统是递减的
     根据栈的指针位置又可以讲栈分为满栈和空栈。
     按照满栈的处理情况:入栈的时候,入栈内容放在栈指针移动后的内存地址;出栈的时候,将弹出当前栈指针地址的内容
     按照空栈的处理情况:入栈的时候,入栈内容放在当前栈指针的内存地址中;出栈的时候,将弹出栈指针移动后地址的内容


          

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

C语言——内存分配的更多相关文章

  1. C语言内存分配方法。

    当C程序运行在操作系统上时,操作系统会给每一个程序分配一定的栈空间. 堆为所有程序共有的,需要时需要申请访问. 一.栈 局部变量.函数一般在栈空间中. 运行时自动分配&自动回收:栈是自动管理的 ...

  2. 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析

    . Android源码看的鸭梨大啊, 补一下C语言基础 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/detai ...

  3. 图解Go语言内存分配

    目录 基础概念 内存管理单元 内存管理组件 mcache mcentral mheap 内存分配流程 总结 参考资料 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理. ...

  4. 内存管理 垃圾回收 C语言内存分配 垃圾回收3大算法 引用计数3个缺点

    小结: 1.垃圾回收的本质:找到并回收不再被使用的内存空间: 2.标记清除方式和复制收集方式的对比: 3.复制收集方式的局部性优点: https://en.wikipedia.org/wiki/C_( ...

  5. 关于c语言内存分配,malloc,free,和段错误,内存泄露

    1.   C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数        void * malloc(size_t size ...

  6. Go语言内存分配机制

    前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请 ...

  7. C语言 内存分配 地址 指针 数组 参数 实例解析

    . Android源码看的鸭梨大啊, 补一下C语言基础 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/detai ...

  8. C语言内存分配函数malloc——————【Badboy】

    C语言中经常使用的内存分配函数有malloc.calloc和realloc等三个,当中.最经常使用的肯定是malloc,这里简单说一下这三者的差别和联系. 1.声明 这三个函数都在stdlib.h库文 ...

  9. Go语言内存分配(简述 转)

    在Go语言里,从内存的分配到不再使用后内存的回收等等这些内存管理工作都是由Go在底层完成的.虽然开发者在写代码时不必过度关心内存从分配到回收这个过程,但是Go的内存分配策略里有不少有意思的设计,通过了 ...

  10. C语言内存分配

      (1)代码区(text segment).存放CPU执行的机器指令(machine instructions).通常,代码区是可共享的 (即另外的执行程序可以调用它),因为对于频繁被执行的程序,只 ...

随机推荐

  1. Backbone seajs

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ActiveXObject Word.Application 打印小票

    javascript 时间格式 Date.prototype.format = function (format) { var o = { "M+": this.getMonth( ...

  3. Android开发效率—Eclipse快捷键

    很多过去使用Visual Studio开发软件的网友可能不熟悉Java开发环境,今天Android开发网告诉大家一些提高Android开发效率的Eclipse快捷键,可以有效率的帮助我们管理代码和减少 ...

  4. powerdesigner 15 如何导出sql schema

    PowerDesigner导出所有SQL脚本 操作:Database=>Generate Database PowerDesigner怎么导出建表sql脚本 1 按照数据库类型,切换数据库. D ...

  5. 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml

    来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...

  6. html5 移动端单页面布局

    序     移动端的web网页使用的是响应式设计,但一般我们看到的网站页面都是跳转刷新得到的,比如通过点击一个menu后进入到另一个页面 今天来说下是移动端的单页面的布局.单页面就是一切操作和布局都是 ...

  7. 径向基函数(RBF)神经网络

    RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理.系统 ...

  8. cdoj 1324 卿学姐与公主 线段树裸题

    卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  9. Linux和Windows的换行符

    一直对换行符这个东西概念比较模糊,直到最近花了一点时间仔细研究了一下,才彻底搞清楚这个问题,本文前面介绍部分是外文转载,后面例子是个人总结,希望能对大家有一些帮助. 回车符号和换行符号产生背景 关于“ ...

  10. laravel小抄

    原文地址:http://cheats.jesse-obrien.ca/ Artisan // Displays help for a given command php artisan --help ...