内存存储数据
程序运行的时候,操作系统会给它分配一段内存,用来储存程序和运行产生的数据。这段内存有起始地址和结束地址
起始地址是较小的那个地址,结束地址是较大的那个地址。
堆(heap)
从低位到高位分配占据内存空间
用户通过动态的内存占用请求(如malloc命令,新建对象)
必须手动释放或通过垃圾回收机制来回收(不会自动消失)
先进先出
栈(stack)
除了heap以外,其他的内存占用叫做栈
stack是由于函数运行而临时占用的内存区域
从高位到低位占据内存空间
后进先出
关于堆的具体解释(个人理解):
执行函数时,会在内存建立一个帧,函数中如果包含函数,则继续建立,执行完后,帧被回收,回到中断执行的地方 继续往下执行。通过这种机制,就实现了函数的层层调用,并且每一层都能使用自己的本地变量,
所有的帧都存放在 Stack,由于帧是一层层叠加的,所以 Stack 叫做栈。生成新的帧,叫做"入栈",英文是 push;栈的回收叫做"出栈",英文是 pop。Stack 的特点就是,最晚入栈的帧最早出栈(因为最内层的函数调用,最先结束运行),这就叫做"后进先出"的数据结构。每一次函数执行结束,就自动释放一个帧,所有函数执行结束,整个 Stack 就都释放了。
程序运行的时候,操作系统会给它分配一段内存,用来储存程序和运行产生的数据。这段内存有起始地址和结束地址
起始地址是较小的那个地址,结束地址是较大的那个地址。
堆(heap)
从低位到高位分配占据内存空间
用户通过动态的内存占用请求(如malloc命令,新建对象)
必须手动释放或通过垃圾回收机制来回收(不会自动消失)
先进先出
栈(stack)
除了heap以外,其他的内存占用叫做栈
stack是由于函数运行而临时占用的内存区域
从高位到低位占据内存空间
后进先出
关于堆的具体解释(个人理解):
执行函数时,会在内存建立一个帧,函数中如果包含函数,则继续建立,执行完后,帧被回收,回到中断执行的地方 继续往下执行。通过这种机制,就实现了函数的层层调用,并且每一层都能使用自己的本地变量,
所有的帧都存放在 Stack,由于帧是一层层叠加的,所以 Stack 叫做栈。生成新的帧,叫做"入栈",英文是 push;栈的回收叫做"出栈",英文是 pop。Stack 的特点就是,最晚入栈的帧最早出栈(因为最内层的函数调用,最先结束运行),这就叫做"后进先出"的数据结构。每一次函数执行结束,就自动释放一个帧,所有函数执行结束,整个 Stack 就都释放了。