2022年c语言内存分配 .pdf

上传人:Che****ry 文档编号:34881709 上传时间:2022-08-19 格式:PDF 页数:6 大小:87.48KB
返回 下载 相关 举报
2022年c语言内存分配 .pdf_第1页
第1页 / 共6页
2022年c语言内存分配 .pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《2022年c语言内存分配 .pdf》由会员分享,可在线阅读,更多相关《2022年c语言内存分配 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、c 语言的 4G 虚拟寻址空间的概念 . 1 c 语言变量分配与5 个区的概念 . 1 c 语言变量的使用与作用域. 2 局部变量出作用域则销毁 . 2 文字常量区的销毁过程. 3 代码区的销毁 . 5 全局变量与静态变量的销毁. 5 堆区的销毁过程 . 5 c语言的 4G 虚拟寻址空间的概念计算机内存分配的最小单位是字节,而数据操作的最小单位是位一个字节 8 个位那么我们现在用的计算机都是32 位,所谓32 位,表示的cpu 能找到的范围是FFFFFFFF(11111111 11111111 11111111 11111111),换算成10 进制就是0-4294967295( 字节)=419

2、4303(k)=4096(m)=4(G)=T 答案:因为32 位的计算机能最大的地址范围为4G cpu 是通过地址总线来找对应的位置。c语言变量分配与5 个区的概念#include #include int k=1; void main() int i=1; /1 局部变量char *j; static int m=1; /2 静态局部变量char *n=hello; /3 文字常量区j = (char*)malloc(2); /4 堆变量printf( “ %dn” ,k); 地址内容00000000 0012FF74(n) 00422FB8 0012FF78(j) 00380FE0 名师资

3、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 0012FF7C(i)1 00380FE0 2 个空字节0040100a int k=1;/ 全局变量void main() int i=1; /1 局部变量char *j; static int m=1; char *n=hello; j = (char*)malloc(2); /一般不确定需要多大空间的时候用free(j);/ 及时释放 00422FB8 “ hello”004273

4、18(k) 1 0042731C(m) 1 FFFFFFF c语言变量的使用与作用域局部变量出作用域则销毁int Add() int i=10,j=5; printf(%xn,&i); printf(%xn,&j); return i+j; int Min() int k=10,m=5; printf(%xn,&k); printf(%xn,&m); return k-m; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - voi

5、d main() Add(); Min(); 地址内容00000000 0012FF24(m) 5 0012FF28(k) 10 代码区int Add() int i=10,j=5; printf(%xn,&i); printf(%xn,&j); return i+j; int Min() int k=10,m=5; printf(%xn,&k); printf(%xn,&m); return k-m; void main() Add(); Min(); FFFFFFF 文字常量区的销毁过程文字常量区的内容随着进程的结束进行自动释放,对应销毁的只是指向文字常量区的一个指针变量而已。int Ad

6、d() int i=10,j=5; 栈指针名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - char *k=hello;/ 字符指针指向常量区printf(%xn,&i); printf(%xn,&j); return i+j; int Min() int k=10,m=5; printf(%xn,&k); printf(%xn,&m); return k-m; void main() Add(); Min(); 地址内容0000

7、0000 0012FF20 00422FB80012FF24 5 0012FF28 10 代码区int Add() int i=10,j=5; printf(%xn,&i); printf(%xn,&j); return i+j; int Min() int k=10,m=5; printf(%xn,&k); printf(%xn,&m); return k-m; void main() Add(); Min(); 栈指针名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6

8、 页 - - - - - - - - - 00422FB8 “ hello”FFFFFFF 代码区的销毁进程结束就销毁全局变量与静态变量的销毁进程结束就销毁比如:静态变量的范例int Add() int i=10,j=5; static int k=10; /下次遇到 k 的时候如果发现是static,则首先到静态区中查找有没有,如果有则取值,不再重新分配k=k+1; return i+j+k; void main() printf(%dn,Add(); printf(%dn,Add(); printf(%dn,Add(); printf(%dn,Add(); printf(%dn,Add()

9、; 堆区的销毁过程进程结束就销毁,但是要考虑一个问题,就是在进程运行的时候,不断的分配堆内存,产生不够分配的请况,这样进程就会出现内存不够退出程序的问题!我们一定要在用完内存的时候,记得用free 函数进行及时释放。这个就是著名的内存泄漏!#include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - int Add() int *i=(int*)malloc(4); int *j=(int*)malloc(

10、4); *i=10; *j=5; free(i);/ 一定要释放堆内存,因为操作系统如果你没有释放,则认为这块区域一直被占用free(j); / 一定要释放堆内存,因为操作系统如果你没有释放,则认为这块区域一直被占用i=0; j=0; return *i+*j; void main() printf(%dn,Add(); 地址内容00000000 0012FF20 0012FF24 0012FF28 00381000 10 00381048 5 代码区int Add() int *i=(int*)malloc(4); int *j=(int*)malloc(4); *i=10; *j=5; free(i); free(j); i=0; j=0; return *i+*j; void main() printf(%dn,Add(); FFFFFFF 栈指针名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁