一、各个区的介绍

 

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

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

二、区别和特点总结

stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
栈:由系统自动分配,速度较快。但程序员是无法控制的。

heap: 需要程序员自己申请,并指明大小,在c中malloc函数
堆:  首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的  申请时, 会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正

C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记相关推荐

  1. C和指针之动态内存分配常见问题和总结

    1.动态内存分配常见问题       1) 结构体成员指针未初始化       2)为指针分配内存太小       3)内存分配成功,但是没初始化       4)内存越界,内存泄漏,free多次或者 ...

  2. C和指针之动态内存分配之编程练习3

    1.问题 编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制!             2.代码实现 #inc ...

  3. C++智能指针与动态内存分配

    智能指针 一般有三种智能智能指针:std::shared_ptr.std::unique_ptr和std::wek_ptr.std::shared_ptr允许多个指针共享内存对象,std::uniqu ...

  4. C和指针之动态内存分配malloc、calloc、realloc简单使用和区别

    1.介绍 3个函数都在<stdlib.h>头文件 1).void* malloc(unsigned size); 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需 ...

  5. C和指针之动态内存分配之输入很多整数进行排序

    1.问题 读取一列整数,然后按升序排列它们,最后打印列表 2.代码实现 #include <stdio.h> #include <stdlib.h> /** 此函数根据你给的比 ...

  6. C和指针之动态内存分配之编程练习4

    1.问题 4.编写一个程序,按照下图中的样子创建数据结构,最后三个对象都是动态分配的结构.第一个对象则可能是一个静态的指向结构的指针.你不必使这个程序过于全面--我们将在下一章讨论这个结构. 2.代码 ...

  7. C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)

    1.问题 编写calloc函数,函数内部使用malloc函数来获取内存               2.代码实现 #include <stdio.h> #include <stdli ...

  8. C和指针之动态内存分配(读取范围在1和标准输入读取的size之前每个数据出现的次数)

    1.问题 读取范围在1和标准输入读取的size之前每个数据出现的次数 2.代码实现 #include <stdio.h> #include <stdlib.h> #includ ...

  9. 内存结构 堆 栈 全局区 常量区 代码区

    转载:https://blog.csdn.net/levy1021/article/details/45419381

最新文章

  1. 岛国科普第2弹-再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
  2. 全志a64linux内核编译,芯灵思Sinlinx A64 Linuxqt编译安装
  3. mapreduce的shuffle机制(来自学习笔记)
  4. PAT-乙级-1020. 月饼 (25)
  5. Hey,孙叫兽的2020 CSDN年度报告已出炉,请查收!
  6. 有了 IP 地址,为什么还要用 MAC 地址?
  7. 整数数组的最大子数组
  8. C#综合揭秘——细说多线程(下)(转载)
  9. 前端问题——报错Uncaught ReferenceError:saveScore is not defined at HTMLButtonElement.onclick
  10. mac 如何安装hp laserjet m1136驱动
  11. 8086 CPU的寄存器结构
  12. Opengl 之 窗口初体验 ------ By YDD的铁皮锅
  13. google aviator:轻量级Java公式引擎
  14. 什么是promise?
  15. Eclipse 下Struts 2.1.6+ 和spring 2.5.5 整合
  16. PS Tray Factory win7 系统托盘 软件用法
  17. Linux 30岁啦,这些历史你知道多少呢?
  18. docker镜像指定安装源_详解如何修改docker pull镜像源
  19. SNMP MIB库的介绍
  20. ubuntu18.04双系统安装教程

热门文章

  1. Azure App Service 上的根证书
  2. C# 将多个图片合并成TIFF文件的两种方法
  3. EFCore3.1+编写自定义的EF.Functions扩展方法
  4. 支撑性服务 自动化能力
  5. C# 8: 默认接口方法
  6. 送福利 | 送书3本 ASP.NET Core 真机拆解
  7. 就喜欢用vSphere部署K8s集群,不全是因为自动化!
  8. Blazor 版 Bootstrap Admin 通用后台权限管理框架
  9. SiteServer CMS 新版本 V6.13(2019年11月1日发布)
  10. 程序员家的大闸蟹:青壳、白底、肉多、爆黄,现在是吃大闸蟹的最佳时期