浅析 GO 中的内存对齐
浅析 GO 中的内存对齐 前置概念 位(bit) 所谓位,是最基本的概念,在计算机中,由于只有逻辑0和逻辑1的存在,因此很多东西、动作、数字都要表示为一串二进制的字码。例如: 1001 0000 1101等等。其中每一个逻辑0或者1便是一个位。例如这个例子里的1000 1110共有八个位,它的英文名字叫(bit),是计算机中最基本的单位。 字节(Byte) 由八个位(bit)组成的一个单元,也就是8个bit组成1个Byte。在计算机科学中,用于表示ASCII字符,便是运用字节来记录表示字母和一些符号,例如字符A便用 “0100 0001”来表示。 字(word) 表示被处理信息的单位,用来度量数据类型的宽度。 在计算机体系结构中,“字"是处理器可以在单个操作中处理的数据单元 - 通常是内存中可寻址的最小单位。它是固定大小的比特(二进制数字)组。处理器的字长决定了它处理数据的效率。常见的字长包括 8、16、32 和 64 比特。一些计算机处理器体系结构支持半字,即一个字中的一半比特数,以及双字,即两个相邻字。 现在最常见的架构是 32 位和 64 位。如果你有 32 位处理器,那意味着它可以一次访问 4 个字节,也就是字长为 4 个字节。如果你有 64 位处理器,那意味着它可以一次访问 8 个字节,也就是字长为 8 个字节。 将数据存储在内存中时,每个 32 位数据字都有一个唯一地址,如下所示。 Figure. 1 - 可寻址内存 我们可以使用加载字(lw)指令读取存储在内存中的数据并将其加载到一个寄存器中。 字的位数并不是确定值,如 x86 机器将字定义为16位(汇编语言课程中),也就是两个字节,在32位arm机器中,字定义为32位(嵌入式课程中)。 指令字长:字节的整数倍,指一个指令字中包含的二进制代码位数。 存储字长:字节的整数倍,一个存储单元存储的二进制代码的长度。 字是单位,随系统而变,字长是同一时间处理二进制的长度。 字符与字节对应关系 常见的编码字符与字节的对应关系如下: ① ASCII 码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。 ② UTF-8 编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。 ③ Unicode 编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。 符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。 ④ GBK 编码方式是中文占两个字节,英文占1个字节。 ...