• c语言中的栈 和 堆


    栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

    堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表

    全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放

    文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

    程序代码区—存放函数体的二进制代码。

    栈就像瓶子,数据往里面放,第一个拿出来的数据就是你最后一个放进去的数据,,叫先进后出。。 
    堆更像管子,数据从这头进去,从另一头取出来,,先进去的数据先出来。。 


    栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活;而堆是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一。不同堆分配的内存无法互相操作。栈空间分静态分配和动态分配两种。静态分配是编译器完成的,比如自动变量(auto)的分配。动态分配由alloca函数完成。栈的动态分配无需释放(是自动的),也就没有释放函数。为可移植的程序起见,栈的动态分配操作是不被鼓励的!堆空间的分配总是动态的,虽然程序结束时所有的数据空间都会被释放回系统,但是精确的申请内存/释放内存匹配是良好程序的基本要素。

  • 相关阅读:
    C#中upd分包与发送,已经实现全部代码
    Jmeter字体大小、背景色
    Linux查看日志 tail -f , grep
    xshell如何选中即复制,右键即粘贴
    Jmeter如何做接口测试
    Jmeter 线程数、ramp-up period (in seconds)、循环次数
    java反射机制入门01
    java实现文件夹(包括其中的子文件夹、子文件)的复制——递归
    ViewPager实现广告自动轮播核心代码(Handler+Thread)
    ViewPager实现启动引导页面(个人认为很详细)
  • 原文地址:https://www.cnblogs.com/qingjoin/p/2409093.html
Copyright © 2020-2023  润新知