堆、栈记录
来源:互联网 发布:整进度计划软件 编辑:程序博客网 时间:2024/06/11 21:49
堆、栈的理解:
栈是一个特殊的内存区域,它储存了每个函数的创建的临时变量,它们对于该函数为局部变量。它的工作机制是,函数的每个变量都会“压入”栈中,并且可在函数内部使用。它是一个真正的栈数据结构,所以是后进先出的。这对于
main
中所有类似char section
和int id
的局部变量也是相同的。使用栈的优点是,当函数退出时C编译器会从栈中“弹出”所有变量来清理。这非常简单,也防止了栈上变量的内存泄露。堆更容易解释,因为它就是你电脑中的剩余内存,你可以通过
malloc
访问它来获取更多内存,OS会使用内部函数为你注册一块内存区域,并且返回指向它的指针。当你使用完这片区域时,你应该使用free
把它交还给OS,使之能被其它程序复用。如果你不这样做就会导致程序“泄露”内存,但是Valgrind
会帮你监测这些内存泄露。- 如果你从
malloc
获取了一块内存,并且把指针放在了栈上,那么当函数退出时,指针会被弹出而丢失。 - 如果你在栈上存放了大量数据(比如大结构体和数组),那么会产生“栈溢出”并且程序会中止。这种情况下应该通过
malloc
放在堆上。 - 如果你获取了指向栈上变量的指针,并且将它用于传参或从函数返回,接收它的函数会产生“段错误”。因为实际的数据被弹出而消失,指针也会指向被释放的内存。
有些地方还不是很理解,先记录下来
0 0
- 堆、栈记录
- 算法记录:堆排序
- 堆--学习记录
- [记录]stack(栈)和heap(堆)的不同
- C#中堆排序记录
- 堆,栈,托管堆
- 栈、堆、进程堆
- 天天记录 - Java String如何分配内存空间,分析Java堆与栈
- 快排,堆排序,基数排序手写记录
- c语言二叉堆《学习记录》poj3253
- 记录一下自己实现的堆排序
- Nodemanager堆内内存泄漏问题记录
- 堆?栈?
- 堆 栈
- 栈、堆
- 堆,栈
- 栈堆
- 堆 栈
- Qt 求两个多边形组合后的凸包,Qt里的排序方法
- Apache2.2.x 安装与配置详解
- sublime
- wireshark过滤抓包与过滤查看
- 知识体系图
- 堆、栈记录
- linux 下shell中的“-e,-d,-f”什么意思
- 解决多行标题,末行宽度不够时显示省略
- 日常随记
- winhttp和wininet头文件冲突
- android 网络监控判断
- 技术之误
- 能用javac编译程序,却不能用java运行程序
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择