程序员的自我修养笔记3 内存管理
程序的内存布局
大多数的操作系统中,都会有一部分空间是程序无法访问的,这是内核空间,专门留给操作系统内核使用的。一个进程的空间中,有4个部分,分别是:
- 栈:维护函数调用的上下文,一般分配在用户空间的最高地址
- 堆:容纳程序动态申请的内存,比如C++的
new
或者malloc
申请的。堆一般位于栈的下方。 - 可执行文件映像:存储着可执行文件在内存里的映像
- 保留区:内存中收到保护而禁止访问的区域的总称
程序中的段错误,就是程序操作了不允许访问的地址造成的。一般来说,这都是由非法指针解引用造成的,出现这种情况首先应当检查指针的调用情况。
栈与调用管理
栈在操作系统中,表示具有栈属性的动态内存总称。栈保存了函数调用所需要的维护信息,这些一般被称为堆栈帧或活动记录,堆栈帧一般包括:
- 函数的返回地址和参数
- 临时变量:函数的非静态局部变量和编译器自动生成的其它临时变量
- 保存的上下文:函数调用前后需要保持不变的寄存器。上下文的理解,请参考这篇博客。通俗的讲,就是程序执行需要的外部信息,类似于文章中的语境。
一个栈的内存结构:
一个函数的调用,在i386中,一般是这样的:
- 参数压入栈中
- 当前指令的下一个指令地址压入栈中
- 跳到函数体执行
堆与内存管理
栈的数据在函数返回的时候就会被释放掉,所以无法传递到函数的外部。全局变量等,只能在编译期间进行处理,此时需要堆进行操作。
程序在堆中申请的数据,只能手动进行释放,如果丢失掉申请的地址,那么会造成无法释放的现象,要格外注意这种情况。关于Linux、Windows等的堆管理之类的算法,可以具体查阅资料。
程序员的自我修养笔记3 内存管理相关推荐
- 程序员的自我修养笔记(持续更...)
文章目录 程序员的自我修养 1.基础知识 2.编译和链接 2.1被隐藏的过程 2.1.1预编译 2.1.2 编译 2.1.3 汇编 2.1.4 链接 2.2 编译器做了什么 2.2.1 词法分析 2. ...
- 程序员的自我修养笔记之装载
可执行文件的装载与进程 介绍ELF文件在Linux下的装载过程,探寻可执行文件装载的本质 什么是进程的虚拟地址空间 为什么进程要有自己独立的虚拟地址空间 几种装载方式 进程虚拟地址空间的分布情况 进程 ...
- 程序员的自我修养笔记(一)
一..牵扯到"计算"这个概念的都可以成为计算机,我们研究的主要是兼容x86指令集的32位CPU个人计算机. 1. 早期:CPU和内存的频率差不多,连接在同一个总线上. I/O设备效 ...
- 程序员的自我修养笔记 2
编译的基本流程 构建:编译和链接合并到一起的过程. 整个编译的过程可以分为4个阶段: 预处理:主要是处理#符号后面的内容,比如展开宏定义和处理ifndef等:还包括删除掉所有的注释等.还有一个重要的步 ...
- 【读书笔记】程序员的自我修养总结(七)
[读书笔记]程序员的自我修养总结(七) 标签: [编程开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:这是程序员的自我修养一书的读书总结,随着阅 ...
- 【读书笔记】程序员的自我修养总结(一)
程序员的自我修养总结(一) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:这是程序员的自我修养一书的读书总结,随着阅读的推进,逐步增加内容. 1. 关 ...
- 程序员的自我修养读书笔记-1
前序:作为一个马上就要工作的非科班本科生,前段时间为了找工作,有针对性的学习了一些编程语言,数据结构,网络方面的知识,学的非常浅,非常杂乱,存粹是为了应对找工作.现在空下来了,想着以后应该就是走程序员 ...
- 《程序员的自我修养》阅读笔记(一)
这本书的初版是2009年出版的,但是其理论知识放在2021年仍然管用,十多年计算机的框架并没有发生大的变化.这本书讲解了一门编程语言是如何诞生的,通过这本书,可以理解一些操作系统和软件的运行机制和原理 ...
- 【读书笔记】【程序员的自我修养 -- 链接、装载与库(三)】函数调用与栈(this指针、返回值传递临时对象构建栈、运行库与多线程、_main函数、系统调用与中断向量表、Win32、可变参数、大小端
文章目录 前言 介绍 内存 内存布局 栈与调用惯例 堆与内存管理 运行库 入口函数和程序初始化 C/C++运行库 运行库与多线程 C++全局构造与析构 fread 实现 系统调用与API 系统调用介绍 ...
最新文章
- 【Web安全】php://filter 的浅略底层分析
- 实例讲解Oracle数据库设置默认表空间问题
- CAS Server(一):搭建服务端
- is transfer = C ( only read dynamically) not supported in one order scenario
- android注册界面高级,Android用户注册界面简单设计
- 揭秘.NET Core剪裁器背后的技术
- egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?
- 谈谈枚举和 那啥 那啥来着 哦 对对对 泛型!
- 欧几里得算法、扩展欧几里得算法、求逆元、中国剩余定理、扩展中国剩余定理
- IDL 读取葵花8(Himawari-8)HSD数据
- 虚拟机win 7 上安装VWware Tools提示升级系统到SP1
- MySQL运算符介绍(萌新必备!!)
- 云控微信开发SDK使用教程--手机微信群聊删除通知服务端
- ubuntu18.04安装0.6以上版本的flameshot
- ZY Player 2.8.3 中文版 (全网视频播放器)
- anaconda利用pip安装module
- 初学Java 从0-1创建Spring boot+Mybatis - plus+Swagger2+Mysql(代码生成器)
- N1盒子单臂路由设置
- 5.1 c++ STL 容器适配器简介
- 《天龙八部》之《少年游》