1、程序执行需要内存支持
(1)对程序来说,内存就是程序的立足之地(程序是被放在内存中运行的);程序运行需要内存来存储一些临时变量。
2、内存管理最终是由操作系统来完成的
(1)内存本身在物理上是一个硬件器件,由操作系统提供。
(2)内存是由操作系统统一管理,为了内存管理方便又合理,操作系统提供了多种机制来让我们应用程序使用内存。
这些机制彼此不同,各自有各自的特点,我们程序根据自己的实际情况来选择某种方式获取内存(在操作系统处登记
这块内存的临时使用权限)、使用内存、释放内存。
3、三种内存来源:栈(stack)、堆(heap)、数据区(date)
在C语言中,能够获取的内存就有三种情况:栈(stack)、堆(heap)、数据区(date)
4、栈的详解
运行时自动分配&自动回收:栈是自动管理的,程序员不需要手工干预,方便简单。
反复使用:栈内存在程序中其实就是那一块空间,程序反复使用这一块空间。
脏内存:栈内存由于反复使用,每次使用后程序不会去清理,因此分配到时保留原来的值。
临时性:函数不能返回栈变量的指针,因为这个空间是临时的。也就是说函数不能返回函数内部局部变量的地址,因为这个函数
执行完后这个局部变量就不存在了。这个局部变量是分配到栈上的,虽然局部变量不在了,但是栈内存还在,还可以访问,但是访问时,
实际上这个内存地址已经和当时那个变量无关了。
栈会溢出:因为操作系统事先给定了栈的大小,如果在函数中无穷尽的分配栈内存,总能用完。
|