刚开始学习c语言的话,对内存的理解不够深刻,这里我简简单单的谈一下:
1、首先我们肯定知道电脑的存储设备分为两种,内存和硬盘,但是一般的人都只知道内存大电脑会快,硬盘大能存很多东西,这些东西显然都是浅显的,对于一般人就够了,但是对于我们的软件开发者这一点是远远不够的。
内存特点:存数数据掉电丢失、不能永久的存储数据。
硬盘特点:永久的存储数据,掉电不丢失数据。
我们的程序,包括操作系统都是放在硬盘中存储的,当我们开机或者运行一个程序的时候,操作系统会将应用程序由硬盘,加载到内存中,从而执行,也就是说程序的运行是在内存中,程序的存储是在硬盘中的(操作系统是由一段特有的程序加载到内存),所以内存越大我们就可以在内存中运行更多的程序。也就是说我们的快。
2、上面我们提到了速度快,是因为不同的存储设备访问速度是不一样的,内存的访问速度是远远要快于硬盘的,所以如果内存很大,我们就不用频繁的访问硬盘,速度就快起来。
下面简单的介绍一下存储设备的访问速速:
寄存器 > cache缓存 > 内存> 硬盘> 网络
这里面我们知道、买电脑的时候,还会问下缓存多大,也是速度这个原因。
这里提到的网络,网络也是一种存储数据的方式。
3、程序中的内存管理,程序加载到内存中,内存也是分不同的位置,有代码段、数据段、只读数据段 堆栈段等。这里我不一一赘述。主要给大家介绍一下我们写程序中的数据都是放在那里的。
内存分为:静态存储区、堆和栈
1、静态存储区存放一些全局变量和static修饰的局部变量,存放在这个区域的变量有一个特点就是程序运行的时候都有效。
2、堆区,平常我们在c语言中用malloc、realloc等申请的内存或者在OC中alloc申请的内存,都是存储在堆区的,这个内存区域是需要我们程序员手动进行管理的,如果不管理,就很容易造成内存泄露,malloc申请一定要free释放,new申请一定要delete释放。
3、栈区、这个区域存放的就是局部变量,不用我们手动去管理,他会动态的申请和释放。有点需要说明的是,在函数返回一定不要返回局部变量,因为函数在调用结束,函数的栈就被释放了。
好了时间也不早了,就写到这里,以后大家有什么不明白的欢迎提出来,我们一起沟通交流 |
|