A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 默默者 中级黑马   /  2014-5-3 18:42  /  1029 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近学习C语言的时候,收集了内存存储区域方面的知识,大概有两种说法。
一种说法是栈,堆,全局区,文字常量区,程序代码区;另外一种说法是栈,堆,未初始化数据段,已初始化数据段,程序代码区。
请教一下,这两种说法有什么区别?

2 个回复

倒序浏览
首先说下 内存分配方式有三种:
  (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

  (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

  (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用alloc或new申请任意多少的内存,程序员自己负责在何时用release释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
回复 使用道具 举报
1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。

2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放

4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马