转自 http://blog.csdn.net/feixiaoxing/article/details/6839301
内存是程序运行的基础。所有正在运行的代码都保存在内存里面。内存需要处理各种各样的数据,包括键盘的数据、鼠标的数据、usb的数据、串口的数据、摄像头的数据,那么这些数据经过程序的处理之后,就要进行输出到串口、屏幕、usb等。
内存只有一个,但是程序里面的空间有很多种。但是内存中的数据类型只有几种,比如说全局中的数据、堆中的数据、临时堆栈中的数据。那么他们有什么区别呢?我们可以通过代码发现一些问题。
(1)全局数据
-
static
int
value = 100;
-
-
void
process()
-
{
-
static
int
number = 10;
-
}
大家可以在这里看到,value和number的数据其实都属于全局数据,这里的变量是不随着函数的调用发生变化的。
(2)堆数据
-
void
process()
-
{
-
char
* point = (
char
*)malloc(100);
-
free(point);
-
}
这里的point分配的数据就是堆数据,如果没有free操作,那么它的存在也是全局的。只要内存不主动释放,那么这个内存就会以一直存在。
(3)临时数据
-
void
process()
-
{
-
char
name[100] = {0};
-
return
;
-
}
这里的数据都是堆栈内部的数据,一旦process调用结束返回之前,那么name地址指向的内存空间已经被其他函数使用。此时这段内存空间对我们来说
已经没有什么意义了。所以,不管在函数里面用了多少空间,如果你想在函数返回之前继续使用里面的数据,务必在函数返回前拷贝完毕。
这篇博客的内容比较简单,主要讲述了内存的一些内容。其实关于内存的东西还很多。这里说明一下只是让大家有一个了解:
1) 全局数据是我们喜欢使用的类型,用起来比较方便
2)堆数据是系统给我们安排的空间
3)堆栈空间只能存在于当时的函数之中,函数返回即失去意义
虽然我们上面这么说,但是这三个概念有的时候也是可以相互迁移的,比如说:
1) 有的时候,我们为了测试的需要,首先构建一个全局内存池,以后测试的内存都是通过自定义的malloc在内存池中分配的,所以这个时候,堆分配和全局联系在了一起。
全局内存空间 < =========> 内存池 < =========> 本地空间分配
2) 如果我们使用的函数空间比较小,那么所有的操作就可以在一个函数内部完成了,那么这时候全局空间和临时堆栈是不是一致的呢
全局空间 < =============> 本地堆栈
上面的说法有些绕,但是我们的目的只是想让大家时刻明白:
a)必须时刻明白我们的数据在哪块空间里面
b)内存会不会越界
c)内存会不会泄露
d)内存访问的数据是否依然有效
......
分享到:
相关推荐
"一步一步写算法(全)"这个资源显然包含了丰富的算法学习材料,可能是由一系列教程、笔记或者实战案例组成的集合。这份资源的价值在于其全面性,覆盖了算法学习的多个方面,对于想要提升算法能力的程序员或学生来说...
在CSDN上发布的“一步一步写算法C”通过一系列步骤,帮助初学者深入理解如何用C语言编写、理解和优化算法。 首先,我们认识到了算法的重要性。在软件开发中,算法是决定程序功能和效率的关键。没有正确的算法,软件...
3. **一步一步写算法 - v1.0**: 这个版本可能更注重实践,引导学习者逐步构建算法。它可能包含逐步的代码实现和详细的步骤解释,让读者能够亲手编写并理解每一种算法,从而加深记忆和理解。 4. **坐在马桶上学...
标题“自己写的AES加密算法,输出每一步的结果”表明这是一个个人实现的AES加密过程,能够展示加密的各个步骤。这通常对于学习和理解AES的工作原理非常有帮助。下面将详细解释AES加密的基本概念、流程以及每个步骤的...
《一步一步写嵌入式操作系统》是一本面向初学者的优秀教程,旨在引导读者逐步了解并构建自己的嵌入式操作系统。这本书的源代码是学习过程中的重要辅助材料,它提供了实践操作系统的具体步骤和实例,帮助读者更好地...
贪心算法是计算机科学中一种重要的算法设计策略,它在解决优化问题时,通常采取每一步选择局部最优解的方式来逐步逼近全局最优解。本套课件“算法设计与分析之贪心算法学习”旨在帮助初学者理解和掌握这种算法思想。...
- 贪心算法:在每一步选择中都采取当前状态下最好的或最优的选择策略。 - 回溯法:逐步构建解空间树,当发现所选择的路径无法达到最优解时,则退回一步重新选择。 2. **算法分析技术**: - 时间复杂度分析:评估...
九(再续)、教你一步一步用c 语言实现sift 算法、上九(再续)、教你一步一步用c 语言实 现sift 算法、下 十、从头到尾彻底理解傅里叶变换算法、上 十、从头到尾彻底理解傅里叶变换算法、下 十一、从头到尾彻底解析...
8. 贪心算法:在每一步选择最优解,以期望得到全局最优解,例如霍夫曼编码。 9. 回溯算法:在解决问题时,当发现当前路径无法到达目标时,回溯到上一步,尝试其他路径,如八皇后问题。 10. 广义表、栈、队列、链表...
贪心算法是一种优化策略,它在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的。这种算法通常用于解决复杂问题,通过局部最优解逐步逼近全局最优解。贪心算法并不...
贪婪算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。贪婪算法的特点在于它总是做出局部最优的选择,期望这些局部最优的选择能导出全局最优解。然而...
在MATLAB中,禁忌搜索涉及设定初始解、禁忌长度、停止条件等参数,并在每一步中根据禁忌策略和邻域搜索策略更新解。 4. **混沌优化**(Chaos Optimization):混沌优化利用混沌系统的遍历性和随机性来寻找全局最优...
算法的基本思想是计算每一步沿x轴和y轴的增量,然后根据这些增量更新当前像素位置。由于DDA算法计算量较大,尤其是在处理大量像素时,效率相对较低。 接着,我们来讨论Bresenham算法。Bresenham算法是为了解决DDA...
夜深人静写算法(四)算法设计与分析第四次作业涉及了多个重要主题,包括贪心算法、动态规划、图算法等。在贪心算法方面,我们学习了如何通过每一步的最优选择来得到整体的最优解,例如霍夫曼编码、最小生成树等问题...