虚拟内存
虚拟内存是一种计算机的内存管理技术,,它将程序使用的内存地址映射成内存中的物理地址(使应用程序认为它拥有大型连续可用的地址空间,实际上是被分隔的多个物理内存碎片,有一部分甚至没有在内存上,而是在外部的存储器(如硬盘上,使用时再进行数据交换))。
主要优点
- 使应用程序不必管理共享内存空间,(当每个进程运行在它自己的专用地址空间时,无需重新定位程序代码或使用相对寻址访问内存。)由于内存隔离提高了安全性
- 并且能够使用分页技术在概念上使用比物理可用的更多的内存(提供一个超出内存实际容量的虚拟地址空间)。
cpu中的mmu(memory management unit )负责把虚拟地址转化成物理地址
数据的大小
字:字是一个固定大小的数据,是特定处理器中使用数据的自然单位,字的大小通常是和寄存器大小有关的(必须能容纳最大的可用类型),
关键字顺序没有影响
unsigned long/unsigned long int/long unsigned/long unsigned int都是一个意思
寻址
多字节数据以第一个字节作为地址
字节顺序(简称字节序)
计算机中存储器中或者传输时数据字的字节排序
- 大端存储 ibm/mips
- 小端存储 x86
大端存储指的是数据的最低有效字节存储在最大的内存地址中(顺序存储)
小端存储则相反,最小有效字节存储在最小地址中。(逆序存储)
32位和64位中的字与地址
逻辑运算
- NOT:1变0,0变1
- AND:全1为1,否则为0
- OR:全0为0,否则为1
- XOR:相同为0,不同为1
可以看到差别在long[int]上 64位的long[int]范围扩展到了8个字节,最大到2^63-1(这是个有符号数)
无符号数 unsigned long 的数据范围是0-2^64-1
无符号数拥有更大的正数表示范围(通常为有符号数的两倍+1)但是无法表示负数,最小值通常为0.
ieee754浮点数
V=(-1)^s*M*2^E
M代表尾数 E是阶数
舍入方式
- round-to-even 四舍五入
- round-toward-zero 趋0舍入 向一个离0最近的整数舍入
- round-to-down 往更小的整数舍入
- round-up 向更大的整数舍入
浮点数
- int ->float 不溢出 可能舍入
- int/float->double 不溢出 能够准确表示
- double->float 可能溢出也可能舍入
- float/double->int 可能溢出 如果舍入则是向零舍入