《深入理解计算机系统》系列之信息的表示和存储

来源:互联网 发布:mysql调用自定义函数 编辑:程序博客网 时间:2024/04/28 15:06

第一部分:程序结构和执行
第二章:信息的表示和处理

2.1 信息存储

    大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的存储器单位。而不是在存储器中访问单独的位。

    机器级程序将存储器视为一个非常大的字节数组,成为虚拟存储器(virtual memory)。

    存储器的每个字节都由一个唯一的数字来标识,称为它的地址(address)。所有可能地址的集合称为虚拟地址空间(virtual address space)。顾名思义,这个虚拟地址空间只是一个展现给机器级程序的概念性印象。

给C语言初学者:C语言中指针的角色
    指针是C语言的一个重要特征。它提供了引用数据结构(包括数组)的元素的机制。与变量类似,指针也有两个方面:值和类型。它的值表示某个对象的位置,而它的类型表示那个位
置上所存储对象的类型(比如整数或者浮点数)。

    在C语言中,以0x或0X开头的数字常量被认为是十六进制的值。字母'A'~'F'既可以大写,也可以小写,设置是大小写混写。
    用十六进制描述位模式的好处:既可以避免二进制表示法的冗长,又可以避免十进制表示法与位模式互相转换的麻烦。

    字:每台计算机都有一个字长(word size),指明整数和指针数据的标称大小(nominal size)。因为虚拟地址是以这样的一个子来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为W位的机器而言,虚拟地址的范围为0 -(2的w次方-1)。程序最多访问2的w个字节。

今天大多数计算机的字长都是32位的,这就限定了虚拟地址空间为4GB。

      C语言中数字数据类型的字节数

C声明             32位机器     64位机器
char                   1                   1
short int             2                   2
int                      4                   4
long int              4                   8
long long int      8                   8
char *                4                   8
float                  4                    4
double              8                    8


给C语言初学者:声明指针
对于任何数据类型T,声明 T *p; 表明p是一个指针变量,指向一个类型为T的对象。
例如:
char *p;表示一个指针声明为指向一个char类型的对象。

寻址和字节顺序

     对于跨越多字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在存储器中如何排列这些字节。在几乎所有机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。
     例如:假设一个类型为int的变量x的地址为0x100,也就是说,地址表达式&x的值为0x100,那么,x的4个字节将被存储在存储器的0x100,0x101,0x102,0x103位置。

给C语言初学者:使用typedef命名数据类型
C语言中的typedef声明提供了一种给数据类型命名的方式。这能够极大地改善代码的可读性,因为深度嵌套的类型声明很难读懂。
typedef的语法与声明变量的语法十分相似。除了它使用的是类型名,而不是变量名。
例如:
typedef int *int_pointer;

int_pointer ip;
将类型“int_pointer”定义为一个指向int的指针,并且声明一个这种类型的变量ip。

 

0 0