C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记
一、各个区的介绍
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、区别和特点总结
stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。
栈:由系统自动分配,速度较快。但程序员是无法控制的。
heap: 需要程序员自己申请,并指明大小,在c中malloc函数
堆: 首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的 申请时, 会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正
C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记相关推荐
- C和指针之动态内存分配常见问题和总结
1.动态内存分配常见问题 1) 结构体成员指针未初始化 2)为指针分配内存太小 3)内存分配成功,但是没初始化 4)内存越界,内存泄漏,free多次或者 ...
- C和指针之动态内存分配之编程练习3
1.问题 编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制! 2.代码实现 #inc ...
- C++智能指针与动态内存分配
智能指针 一般有三种智能智能指针:std::shared_ptr.std::unique_ptr和std::wek_ptr.std::shared_ptr允许多个指针共享内存对象,std::uniqu ...
- C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
1.介绍 3个函数都在<stdlib.h>头文件 1).void* malloc(unsigned size); 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需 ...
- C和指针之动态内存分配之输入很多整数进行排序
1.问题 读取一列整数,然后按升序排列它们,最后打印列表 2.代码实现 #include <stdio.h> #include <stdlib.h> /** 此函数根据你给的比 ...
- C和指针之动态内存分配之编程练习4
1.问题 4.编写一个程序,按照下图中的样子创建数据结构,最后三个对象都是动态分配的结构.第一个对象则可能是一个静态的指向结构的指针.你不必使这个程序过于全面--我们将在下一章讨论这个结构. 2.代码 ...
- C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)
1.问题 编写calloc函数,函数内部使用malloc函数来获取内存 2.代码实现 #include <stdio.h> #include <stdli ...
- C和指针之动态内存分配(读取范围在1和标准输入读取的size之前每个数据出现的次数)
1.问题 读取范围在1和标准输入读取的size之前每个数据出现的次数 2.代码实现 #include <stdio.h> #include <stdlib.h> #includ ...
- 内存结构 堆 栈 全局区 常量区 代码区
转载:https://blog.csdn.net/levy1021/article/details/45419381
最新文章
- 岛国科普第2弹-再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
- 全志a64linux内核编译,芯灵思Sinlinx A64 Linuxqt编译安装
- mapreduce的shuffle机制(来自学习笔记)
- PAT-乙级-1020. 月饼 (25)
- Hey,孙叫兽的2020 CSDN年度报告已出炉,请查收!
- 有了 IP 地址,为什么还要用 MAC 地址?
- 整数数组的最大子数组
- C#综合揭秘——细说多线程(下)(转载)
- 前端问题——报错Uncaught ReferenceError:saveScore is not defined at HTMLButtonElement.onclick
- mac 如何安装hp laserjet m1136驱动
- 8086 CPU的寄存器结构
- Opengl 之 窗口初体验 ------ By YDD的铁皮锅
- google aviator:轻量级Java公式引擎
- 什么是promise?
- Eclipse 下Struts 2.1.6+ 和spring 2.5.5 整合
- PS Tray Factory win7 系统托盘 软件用法
- Linux 30岁啦,这些历史你知道多少呢?
- docker镜像指定安装源_详解如何修改docker pull镜像源
- SNMP MIB库的介绍
- ubuntu18.04双系统安装教程
热门文章
- Azure App Service 上的根证书
- C# 将多个图片合并成TIFF文件的两种方法
- EFCore3.1+编写自定义的EF.Functions扩展方法
- 支撑性服务 自动化能力
- C# 8: 默认接口方法
- 送福利 | 送书3本 ASP.NET Core 真机拆解
- 就喜欢用vSphere部署K8s集群,不全是因为自动化!
- Blazor 版 Bootstrap Admin 通用后台权限管理框架
- SiteServer CMS 新版本 V6.13(2019年11月1日发布)
- 程序员家的大闸蟹:青壳、白底、肉多、爆黄,现在是吃大闸蟹的最佳时期