内存的基本单位是字节,所以内存的操作都是以字节为单位进行寻址和操作。C语言中的char类型的大小刚好是一个字节,所以可以借助char,在字节的层面上来操作内存。这种操作可以使移动,复制,交换,初始化等。内存的少不了内存地址,因为每个字节都有一个唯一一个地址,所以就会用到指针。
硬盘的访问速度要比内存慢太多了,每一次内存交换,我们都需要把一大段连续的内存数据写到硬盘上。如果内存交换的时候,交换的是一个占内存空间很大的程序,这样整个机器都会显得卡顿。 1.2.2 内存分页 分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。这样一个连续并且尺寸固定的内存空间,我们叫页(Page)。在...
现在再解释以下第一节的问题,变量a和b都是内存的代号,我们传入的都是内存代号,所以就把内存代号中的值给了change函数,而change函数中的a和b,是该函数内另外的两个内存代号,和main中的内存并无关系,所以change函数中的a和b交换了函数值并没有让main中的anum和bnum交换。 如果想让main函数中的anum和bnum对应...
total 列:系统总的可用物理内存和交换空间大小。 used 列:已经被使用的物理内存和交换空间。 free 列:剩余物理内存和交换空间可用空间。 shared 列:被共享使用的物理内存大小。 buff/cache 列:被 buffer 和 cache 使用的物理内存大小。 available 列:被应用程序使用的物理内存大小。 4.buff/cache 4.1.buffer buffe...
(程序右边)这样子的话并不能交换a和b的值。为什么呢?这是因为主函数调用swap函数时会为其中的变量在栈堆中分配的内存,但在主函数调用完swap函数时,其占的内存会被释放掉。即一开始p和q的内存空间里是12和8。Swap函数交换的也只是p和q的值,a和b的值并没有改变。
内存中的字符表示 与数字数据一样,即使字符不能按原样存储,因为计算机只知道二进制数系统,它也会首先转换为相等的二进制数,然后存储到存储器的位中。 键盘上的每个字符都具有相等的二进制值。 等于该二进制值的十进制数称为ASCII(美国信息交换标准代码)值。 比如说字符'A'的二进制值是01000001,十进制等于65.所以...
内存屏障与 volatile 是高并发编程中比较常用的两个技术,无锁队列的时候就会用到这两项技术。然而这两项技术涉及比较广的基础知识,所以比较难以理解,也比较不容易解释清楚。关于内存屏障和 volatile 网上有相当多的资料,但是总感觉还是不够系统和深入。当然由于我自身水...
file-backed pages在内存不足的时候可以直接写回对应的硬盘文件里,称为page-out,不需要用到交换区(swap);而anonymous pages在内存不足时就只能写到硬盘上的交换区(swap)里,称为swap-out。 文件背景页: 对于有文件背景的页面,程序去读文件时,可以通过read也可以通过mmap去读。当你通过任何一种方式从磁盘读文件时...
它表示对一个int型指针的引用,这样你的交换会确实的影响到p1和p2的值,让p1保存了b的地址,p2保存了a的地址。就等于执行了 p1=&b; p2=&a;但最后的问题是,你选择了打印输出变量 a 和 b。因为从头至尾都没对指针p1、p2指向的内存地址上保存的值做任何改动和操作,所以a和b的值没变。
1.6.3 寄存器、缓存、内存三者关系 按与CPU远近来分,离得最近的是寄存器,然后缓存(CPU缓存),最后内存。 CPU计算时,先预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。于是 CPU<--->寄存器<--->内存,这就是它们之间的信息交换。