Memory Management
名词解释:
heap segmentation
:RAM
中没有一块完整的内存空间以满足内存申请需求,但是总的剩余空间大于需求的情况。这就表现了分配算法的重要性。
Stack & Heap
stack
(栈),有时也称为 frame
(帧)。一帧里存放了一个子过程(subroutine,其实也就是函数) 的信息。这些信息包括函数的返回地址和传入参数。当函数中再调用函数时,这些信息会放入堆栈中,而函数返回时,这些信息出栈并恢复到寄存器中。
函数中每定义一个变量,就会将其存储到栈中。函数返回时,释放整个栈空间。栈的优点在于,分配的整个栈空间都可供函数使用,无需再动态分配或者释放空间。
总结:
- the stack grows and shrinks as functions push and pop local variables
- there is no need to manage the memory yourself, variables are allocated and freed automatically
- the stack has size limits
- stack variables only exist while the function that created them, is running
Heap
是动态分配的空间,由操作系统管理*(不再跟栈一样单独为函数管理)*。堆中的空间在程序执行时可以分配,释放,改变大小。这些操作通过 malloc
和 free
实现。
Stack:
- very fast access
- don’t have to explicitly de-allocate variables
- space is managed efficiently by CPU, memory will not become fragmented
- local variables only
- limit on stack size (OS-dependent)</