码迷,mamicode.com
首页 > 编程语言 > 详细

C语言内存管理

时间:2015-07-24 18:43:58      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:结构图   字符串   c语言   空间   程序   

    一个C语言程序内存空间主要由5个部分组成,由地地址到高地址分别为:代码段、数据段、BSS段、堆区、栈区。其中,栈区和堆区是在程序运行时分配空间的,而代码段、BSS段、数据段则是在程序编译时分配空间的。 结构图如下图技术分享

在C程序中,区分内存所属区域总结如下。

    代码段(code segment):主要存放一些指令、函数。

    数据段:已经初始化的全局变量、静态变量、只读变量。在C代码中,一些只读的数据变量,如字符常量也是存放在数据段中;如下例技术分享

    BSS段:未初始化的全局变量、静态变量、只读变量。BSS段上的数据,用户在定义时未初始化,系统会自动初始化为0(对于整数等),而字符串初始化为NULL。(和数据段的数据对比可知……)

     堆:利用系统函数(malloc、realloc、calloc )分配空间,同时这些空间还需要手动释放(free),不然会发生内存泄露。 堆上的存储空间没有名字,需要通过一个指针变量的指向以访问。

    栈:局部变量(除去静态、只读)、函数形参、函数返回值。栈上的变量,如果定义时未初始化,系统不会自动初始化为0,跟BSS段不同。栈上的变量离开了作用域,存储的空间就会被系统释放,所以函数的函数值不能是局部变量的地址。

    下面一个C程序中变量内存所属的例子。

技术分享

   

C语言内存管理

标签:结构图   字符串   c语言   空间   程序   

原文地址:http://10274409.blog.51cto.com/10264409/1678102

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!