摘要:首先我们要解释一个概念——进程(Process)。简单来说,一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间。 严格来说, 程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念; 进程是程序加载到内存运行后一系列的
阅读全文
摘要:在32位环境下,Windows 默认会将高地址的 2GB 空间分配给内核(也可以配置为1GB),而将剩下的 2GB 空间分配给用户程序。 不像 Linux,Windows 是闭源的,有版权保护,资料较少,不好深入研究每一个细节,至今仍有一些内部原理不被大家知晓。关于 Windows 地址空间的内存分
阅读全文
摘要:在《虚拟地址空间以及编译模式》一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为256TB,那么, 一个C语言程序的内存在整个地址空间中是如何分布的呢? 数据在哪里? 代码在哪里? 为什么要这样分布? 这些就是本节要讲解的内容。 程序内存在地址空间中的分布情况称为内存模型
阅读全文
摘要:通过页表完成虚拟地址和物理地址的映射时,要经过多次转换,还要进行计算,如果由操作系统来完成这项工作,那将会成倍降低程序的性能,得不偿失,所以这种方式是不现实的。 MMU 在CPU内部,有一个部件叫做MMU(Memory Management Unit,内存管理单元),由它来负责将虚拟地址映射为物理地
阅读全文
摘要:如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。 那么,QQ是怎么运行起来的呢? 首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的。 双击QQ图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的QQ软件,将数据(安装的软件
阅读全文
摘要:小数在内存中是以浮点数的形式存储的。浮点数并不是一种数值分类,它和整数、小数、实数等不是一个层面的概念。浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的。 C语言使用定点数格式来存储 short、int、long 类型的整数,使用浮点数格式来存储 float、double 类型的
阅读全文
摘要:在现代操作系统中,short、int、long 的长度分别是 2、4、4 或者 8,它们只能存储有限的数值,当数值过大或者过小时,超出的部分会被直接截掉,数值就不能正确存储了,我们将这种现象称为溢出(Overflow)。要想知道数值什么时候溢出,就得先知道各种整数类型的取值范围。 无符号数的取值范围
阅读全文
摘要:加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件直接支持。为了提高加减法的运算效率,硬件电路要设计得尽量简单。 对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易辨别,但是对于计算机来说,就要设计专门的电路,这无疑增加了硬件的复杂性,增加了计算的时间。 要是能把
阅读全文
摘要:描述命令行参数的时候,对其格式有些约定俗成的写法,各系统之间也有差别。一般采用的格式如下: 命令格式中常用的几个符号含义如下: 尖括号< >:必选参数,实际使用时应将其替换为所需要的参数 大括号{ }:必选参数,内部使用,包含此处允许使用的参数,大括号和尖括号的区别为:大括号中只能选择所列举的必选参
阅读全文
摘要:现代操作系统都使用分页机制来管理内存,这使得每个程序都拥有自己的地址空间。每当程序使用虚拟地址进行读写时,都必须转换为实际的物理地址,才能真正在内存条上定位数据。如下图所示: 内存地址的转换是通过一种叫做页表(Page Table)的机制来完成的,这是本节要讲解的重点,即: 页表是什么?为什么要采用
阅读全文
摘要:关于虚拟地址和物理地址的映射有很多思路,我们可以假设以程序为单位,把一段与程序运行所需要的同等大小的虚拟空间映射到某段物理空间。例如程序A需要 10MB 内存,虚拟地址的范围是从 0X00000000 到 0X00A00000,假设它被映射到一段同等大小的物理内存,地址范围从 0X00100000
阅读全文
摘要:虽然所有的变量最后都会保存到特定地址的内存中,但相应的内存空间必须满足内存对齐的要求。主要出于两个方面的原因: 平台原因:不是所有的硬件平台(特别是嵌入式系统中使用的低端微处理器)都能访问任意地址上的任意数据,某些硬件平台只能访问对齐的地址,否则会出现硬件异常。 性能原因:如果数据存放在未对齐的内存
阅读全文
摘要:所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围。虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响。(个人:编译模式确定的用来表示地址的指针的位数,也就是理论上程序的虚拟地址大小,实际的操作系统是不是支持用指针的全部位数用来表示地
阅读全文
摘要:原地址 intellij idea中文资料网上比较少,对于eclipse的项目如何导入intellij idea也没有完整的说明,本人在这里整理下,方便更多人加入到intellij idea的阵容里。 直接上干货! 一、导入Eclipse项目至idea File – New – Module fro
阅读全文
摘要:String.lines() lines()方法是 static 静态方法。它返回从给定多行字符串中提取的行流,并用行终止符分隔。 ? Syntax 1 2 3 4 /** * returns - the stream of lines extracted from given string */
阅读全文