C语言内存管理)

C语言内存管理)

ID:46533500

大小:147.00 KB

页数:23页

时间:2019-11-25

C语言内存管理)_第1页
C语言内存管理)_第2页
C语言内存管理)_第3页
C语言内存管理)_第4页
C语言内存管理)_第5页
资源描述:

《C语言内存管理)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、堆和栈的区别一、预备知识一程序的内存分配一个由C/C++编译的程序占用的内存分为以一卜•儿个部分1、栈区(stack)—rfl编译器白动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构屮的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它•数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

2、・程序结束后有系统禅放4、文字常量区一常量字符串就是放在这里的。程序结束后山系统释放5、程序代码区一存放函数体的二进制代码。二、例子程序这是一个前辈写的,非常详细//main.cppinta=0;全局初始化区char*pl;全局未初始化区main(){intb;栈chars[]="abc";栈char*p2;栈char*p3="123456";123456在常量区,p3在栈上。staticintc=0;全局(静态)初始化区pl=(char*)malloc(10);p2=(char*)malloc(20);分配得來得10和20

3、字节的区域就在堆区。strcpy(pl,“123456“);123456放在常量区,编译器可能会将它与p3所指向的”123456“优化成一个地方。}一个程序一般分为3段:text段,data段,bss段text段:就是放程序代码的,编译时确定,只读,data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常暈也存放在这个区域bss段:定义而没有赋初值的全局变最和静态变量,放在这个区域C语言内存管理详解伟大的B订1Gates曾经失言:堆和栈的区别一、

4、预备知识一程序的内存分配一个由C/C++编译的程序占用的内存分为以一卜•儿个部分1、栈区(stack)—rfl编译器白动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构屮的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它•数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。・程序结束后有系

5、统禅放4、文字常量区一常量字符串就是放在这里的。程序结束后山系统释放5、程序代码区一存放函数体的二进制代码。二、例子程序这是一个前辈写的,非常详细//main.cppinta=0;全局初始化区char*pl;全局未初始化区main(){intb;栈chars[]="abc";栈char*p2;栈char*p3="123456";123456在常量区,p3在栈上。staticintc=0;全局(静态)初始化区pl=(char*)malloc(10);p2=(char*)malloc(20);分配得來得10和20字节的区域就在堆

6、区。strcpy(pl,“123456“);123456放在常量区,编译器可能会将它与p3所指向的”123456“优化成一个地方。}一个程序一般分为3段:text段,data段,bss段text段:就是放程序代码的,编译时确定,只读,data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常暈也存放在这个区域bss段:定义而没有赋初值的全局变最和静态变量,放在这个区域C语言内存管理详解伟大的B订1Gates曾经失言:640Koughttobeeno

7、ughforeverybody—BillGates1981程序员们经常编写内存管理程序,往往捉心WflUo如果不想触雷,唯一的解决办法就是发现所冇潜伏的地雷并n排除它们,躲是躲不了的。木文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。1、内存分配方式内存分配方式冇三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上创建。在执行函数吋,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元口动被释放

8、。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何吋用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。