深入理解字节对齐

您所在的位置:网站首页 什么叫整型数据库管理 深入理解字节对齐

深入理解字节对齐

2024-07-15 07:30| 来源: 网络整理| 查看: 265

C语言--字节对齐 基础知识了解一、操作系统位数、CPU位数、指令集1.操作系统--32-bit(x86)和64-bit(x64)(1)位数(2)64-bit 2.处理器CPU位数3.CPU指令集4.寄存器5.关系6.计算机字长(机器字长)7.总结 理解字节对齐二、字节对齐1.什么是字节对齐?2.为什么要字节对齐①首先,不同硬件平台对存储空间的处理上存在不同;②根本原因在于CPU访问数据的效率问题;③其次节约空间。 3.如何对齐3.1 标准类型(基本数据类型): 3.2 数组:3.3 结构体3.4 联合体3.5 指定对齐方式 4.字节序和网络序4.1 字节序4.2 网络序 5.字节对齐的隐患6.字节对齐应用

基础知识了解 一、操作系统位数、CPU位数、指令集 1.操作系统–32-bit(x86)和64-bit(x64) (1)位数

  每个时钟周期内,处理器处理二进制代码数,即“0”和“1”的个数。

(2)64-bit

  优点:①可以进行更大范围的整数运算;②可以支持更大的内存。

2.处理器CPU位数

  CPU位数=CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度;   //现在的计算机处理器一般都是64位,这是硬件的事。

3.CPU指令集

  CPU为了实现其功能设计了指令集,即是CPU的全部指令,这是机器语言。计算机的所有功能都是基于CPU的指令集。指令集和CPU的位数是有联系的。

  指令集的作用, 就是告诉程序员/编译器, 汇编一定要有格式. 支持什么指令, 指令带什么限制条件, 用什么操作数, 用什么地址, 都是指令集规范的内容, 要是写错了, 就无法翻译成机器码.

  指令集规范汇编, 汇编可以翻译成机器码, 机器码告诉CPU每个周期去做什么. 因此, CPU指令集是描述CPU能实现什么功能的一个集合, 就是描述"CPU能使用哪些机器码"的集合"。X86是指令集的代号。   那么指令集在CPU里就代表: 只有CPU指令集范围内的指令可以被成功的译码, 并送往CPU流水线后端去执行.

4.寄存器

  寄存器是CPU内部用来创建和储存CPU运算结果和其它运算结果的地方。

5.关系

  操作系统位数 = 其所依赖的指令集位数 >>>cpu类型,编译器类型。 2.为什么要字节对齐 ①首先,不同硬件平台对存储空间的处理上存在不同;

  某些平台对特定类型的数据只能从特定地址开始存取,而不允许其在内存中任意存放。例如,Motorola 68000 处理器不允许16位的字存放在奇地址,否则会触发异常,因此在这种架构下编程必须保证字节对齐。

②根本原因在于CPU访问数据的效率问题;

  以32位机为例,它每次取32个位,也就是4个字节。以int型数据为例,如果它在内存中存放的位置按4字节对齐,也就是说1个int的数据全部落在计算机一次取数的区间内,那么只需要取一次就可以了。如图2-1。如果不对齐,很不巧,这个int数据刚好跨越了取数的边界,这样就需要取两次才能把这个int的数据全部取到,如图2-2,这样效率也就降低了。 在这里插入图片描述

③其次节约空间。

  应该辩证地看:合理对齐,则节约空间;否则浪费空间。如下例: 在这里插入图片描述   结构体TEST1中包含一个4字节的int数据,一个1字节char数据和一个2字节short数据;TEST2也一样。按理说TEST1和TEST2的大小应该都是7字节。之所以出现上述结果,就是因为编译器要对数据成员在空间上进行对齐。

3.如何对齐 3.1 标准类型(基本数据类型):

  基本类型包括char、int、float、double、short、long等基本数据类型。   对齐要求:起始地址为其长度的整数倍即可。如,int类型的变量起始地址要求为4的整数倍。 思考:int究竟占多少个字节?   **操作系统:**每个时钟周期内,处理器处理二进制代码数,即“0”和“1”的个数。如64-bit,32-bit   **CPU位数:**CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度;64-bit,32-bit。   **关系:**操作系统位数 = 其所依赖的指令集位数



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3