深入理解字节对齐 |
您所在的位置:网站首页 › 什么叫整型数据库管理 › 深入理解字节对齐 |
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,这样效率也就降低了。 应该辩证地看:合理对齐,则节约空间;否则浪费空间。如下例: 基本类型包括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 |