博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(二)程序中的内存&&栈
阅读量:4597 次
发布时间:2019-06-09

本文共 1102 字,大约阅读时间需要 3 分钟。

一、程序运行为什么需要内存?基本概念?

  内存是程序运行的立足之地,程序需要用内存来存储一些变量。

  内存管理最终是由操作系统完成的,内存在本质上是一个硬件器件,由硬件系统提供;内存由操作系统统一管理,为了管理内存方便,操作系统提供了很多机制来让我们应用程序使用内存。这些机制彼此不同,各有各的特点,我们程序根据自己的实际情况来分配内存(暂时获得内存的使用权),使用内存,释放内存(向操作系统归还内存使用权限)。在C语言中获得内从的方法为栈、堆、数据区

二、栈

  在C语言中,局部变量是存在于栈中的,栈是一段有限的内存空间。栈是自动分配自动收回,不需要程序员干预,方便简单。

反复使用:栈内存其实是一段固定空间的存储块,程序反复使用这块空间。我们要注意不能函数中返回一个局部变量的地址,因为内存是暂时的,后面会被覆盖掉。

  

#include
int *Fun(void){ int a = 2; return &a;}void Fun1(void){ int b = 5; int c = 6;}int main(){ int *P; int *P1; P = Fun(); printf("a = %d\n",*P); Fun1(); Fun1(); printf("a = %d\n",*P); return 0;}

  这段程序输出如下所示:

 我们只要铭记在函数中不能返回局部变量的地址就不会犯这个错误了。

 脏内存:内存空间反复使用,每次使用完成后程序都不会去清理,因此分配时保留了原来的值,我们要注意在定义局部变量时一定要进行初始化。

 栈会溢出:因为栈的大小是固定的,如果超过这个内存大小,便会溢出。

  

#include
void stack_overflow(void){ int a[10000000] = {
0}; a[10000000-1] = 12;}int main(){ stack_overflow(); return 0;}
#include
void stack_overflow2(void){ int a = 2; stack_overflow2();}int main(){ stack_overflow2(); return 0; }

这两个代码都会导致栈溢出。

 

转载于:https://www.cnblogs.com/zhangshenghui/p/5331095.html

你可能感兴趣的文章
linux的kernel是怎样工作的(TI_DM36X_ARM系统)(1)
查看>>
[luogu4310] 绝世好题 (递推)
查看>>
[luogu3203 HNOI2010] 弹飞绵羊 (分块)
查看>>
-Dmaven.multiModuleProjectDirectory system propery is not set.
查看>>
Python2 unichr() 函数
查看>>
Python 字典 copy()方法
查看>>
Minimum Path Sum
查看>>
Remove Duplicates from Sorted Array II
查看>>
常量指针和指针常量巧妙记忆方法[转]
查看>>
python-haproxy作业讲解视频总结
查看>>
批处理文件脚本总结
查看>>
快速排序C++代码
查看>>
mui搜索框 搜索点击事件
查看>>
bzoj 5289: [Hnoi2018]排列
查看>>
IE10 招贤纳意问题整理文章-安装卸载、功能设置篇
查看>>
joomla处境堪忧
查看>>
Jquery-AJAX
查看>>
python 在windows环境下 压缩文件
查看>>
CSS 动画总结
查看>>
mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
查看>>