内存

作者: 张_何 | 来源:发表于2021-05-07 14:35 被阅读0次

    内存的几大区域

    栈内存和堆内存

    • 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对内存实际上指的是分配内存的算法不一样,如果是以压栈出栈的方式分配的内存,就叫栈内存.如果是以堆排序的方式分配的内存就叫堆内存
    • 堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。

    栈内存(stack)

    • 栈有2种分配方式:静态分配和动态分配。
    • 不过栈的动态分配和堆不同,他的动态分配是由编译器进行释放,无需我们手工实现。
    • 栈是一种线性结构

    堆内存(heap)

    • 堆都是动态分配的,没有静态分配的堆
    • 堆内存的动态分配需要手动释放
    • 堆是一种链式结构

    内存的分配

    静态分配

    • 静态分配发生在程序编译和连接的时候。
    • 静态分配是编译器完成的,比如局部变量的分配。
    • 静态分配的内存是在程序一开始运行就会分配内存,直到程序结束了,内存才被释放。

    动态分配

    • 动态分配则发生在程序调入和执行的时候。
    • 动态分配由函数malloc进行分配
    • 动态分配的内存是在程序调用在程序中定义的函数时才被分配,函数调用结束了,动态内存就释放。

    分配时机

    • 栈是编译时分配空间
    • 堆是运行时分配空间(动态分配)

    访问速度

    • 栈是连续存储,是以压栈出栈的方式管理的,在访问的时候只需要移动栈针来分配和销毁内存。栈是程序启动的时候系统事先分配的,使用过程中系统不干预。
    • 堆是离散存储,它是以堆排序的方式在堆中寻找合适大小的空闲内存块来分配内存。堆是用的时候才向系统申请的,用完了需要交还,这个申请和交还的过程开销相对比较大。
    • 访问的区别: 访问堆的一个具体单元时,需要访问两次内存,第一次取得指针,第二次是真正得数据。而栈只需访问一次。

    相关文章

      网友评论

          本文标题:内存

          本文链接:https://www.haomeiwen.com/subject/wuisdltx.html