博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于内存管理
阅读量:4878 次
发布时间:2019-06-11

本文共 958 字,大约阅读时间需要 3 分钟。

计算机中的内存是分区来管理的,程序和程序之间的内存是独立的,不能互相访问,而每个程序的内存也是分区管理的,一个应用程序所占的内存可以分为很多个区域,通常叫内存四区:

1.代码区
  程序被操作系统加载到内存的时候,所有的可执行代码(程序代码指令、常量字符串等)都加载到代码区,这块内存在程序运行期间是不变的。代码区是平行的,里面装的就是一堆指令,在程序运行期间是不能改变的。函数也是代码的一部分,故函数都被放在代码区,包括main函数。
  注意:"int a = 0;"语句可拆分成"int a;"和"a = 0",定义变量a的"int a;"语句并不是代码,它在程序编译时就执行了,并没有放到代码区,放到代码区的只有"a = 0"这句。
2.静态区
  静态区存放程序中所有的全局变量和静态变量。
3.栈区
  栈(stack)是一种先进后出的内存结构,所有的自动变量、函数形参都存储在栈中,这个动作由编译器自动完成,我们不需要考虑。栈区在程序运行期间是可以随时修改的。当一个自动变量超出其作用域时,自动从栈中弹出。栈有以下特点:

每个线程都有自己专属的栈;

栈的最大尺寸固定,超出则引起栈溢出;

变量离开作用域后栈上的内存会自动释放。

4.堆区

  堆(heap)和栈一样,也是一种在程序运行过程中可以随时修改的内存区域,但没有栈那样先进后出的顺序。更重要的是堆是一个大容器,它的容量要远远大于栈。一般比较复杂的数据类型都是放在堆中。但是在C语言中,堆内存空间的申请和释放需要手动通过代码来完成。对于一个32位操作系统,最大管理管理4G内存,其中1G是给操作系统自己用的,剩下的3G都是给用户程序,一个用户程序理论上可以使用3G的内存空间。堆上的内存必须手动释放(C/C++),除非语言执行环境支持GC(如C#在.NET上运行就有垃圾回收机制,jvm也有垃圾回收机制)。
  堆内存的分配和释放:malloc与free
  malloc函数用来在堆中分配指定大小的内存,单位为字节(Byte),函数返回void *指针;free负责在堆中释放malloc分配的内存。malloc与free一定成对使用。

转载于:https://www.cnblogs.com/xuqiushuo/p/10468647.html

你可能感兴趣的文章
ios微信公众号分享回调事件
查看>>
Apache虚拟目录(二)
查看>>
美化checkbox多选框
查看>>
OnLevelWasLoaded 在脚本中执行顺序
查看>>
jS 闭包
查看>>
数据结构与算法 - 图的邻接表 (思想以及实现方式)
查看>>
小姐姐sql只保留指定列
查看>>
Python Web开发之Flask
查看>>
常见排序算法-----二分插入排序
查看>>
常用meta整理
查看>>
php--学习
查看>>
Xdebug断点调试的工作原理详解
查看>>
CentOS7+Nginx设置Systemctl restart nginx.service服务
查看>>
web服务器,验证码,Xftp使用方法
查看>>
割点 - 模板
查看>>
使用maven 如何生成源代码的jar包
查看>>
Ubuntu 16.04.6 + Win10 双系统时间错误且不一致
查看>>
协同过滤代码---loadMovieLens.py文件
查看>>
条件分布
查看>>
Python之字符串的特性及常用方法
查看>>