首页 > 其他分享 >字节对齐

字节对齐

时间:2022-08-30 23:22:31浏览次数:65  
标签:字节 读出 计算机 字长 对齐 size

1.字长定义

计算机字长指的是CPU一次(一个时钟周期)能处理的最大长度,一般来说有如下属性

计算机字长 = 寄存器大小 = 数据总线宽度 = 地址长度 = 机器位数

1.为什么要字节对齐

一般来讲,计算机都是从内存一次读出整个字,然后进行处理,假设字长32位,即4B,数据长度也为4B,如果数据对齐,那么数据在内存中存储状态如下

image-20220827214958042

CPU一次就能将所有数据读出,而如果没有进行字节对齐,计算机需要两个时钟周期才能读出所有数据

image-20220827215016735

还存在的类似TLB 页未命中错误,读写一致性等问题.

2.怎么解决

假设计算机字长为n,那么一个字节对齐的地址至少有\(log_2^n\)个最低位为0

看如下样例

struct edge{
  size_t val;
  edge* next;
  int flag;
}

虽然flag只用来表示0和1两种状态,但使用int而不是bool可以保证字节对齐,

附录,如何查看计算机位数

打印size_t和任意指针的大小都可以获得计算机位数

printf("%d", sizeof(size_t));
printf("%d", sizeof(void *));

标签:字节,读出,计算机,字长,对齐,size
From: https://www.cnblogs.com/INnoVationv2/p/16641332.html

相关文章

  • 字节跳动端智能工程链路 Pitaya 的架构设计
    ClientAI是字节跳动产研架构下属的端智能团队,负责端智能AI框架和平台的建设,也负责模型和算法的研发,为字节跳动开拓端上智能新场景。本文介绍的Pitaya是由字节跳动的......
  • 一个字符占几个字节
    1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节。ASCII是一个字节,Unicode是两个字节。Java的字符是Unicode的,所以是两个字节。字符是指计算机中使用的字母、数字、......
  • css——复选框汉字不对齐
    1.复选框汉字不对齐<inputtype="checkbox"v-model="isAll"/><span>全选</span>2.input、span加上vertical-align:middle;属性input{vertical-alig......
  • java 字节码指令理解
    publicclassTest{privateintnum1=1;publicstaticintNUM1=100;publicintfunc(inta,intb){returnadd(a,b);}publicint......
  • 字节跳动基于 ClickHouse 优化实践之“查询优化器”
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印......
  • mfc中如何将多字节编码转为utf8编码
    新建mfc项目时可选多字节编码(MBCS)或者unicode编码,而有些第三方库用到了utf8编码,此时需要进行编码转换。以下是将多字节编码转换成utf8的mfc代码,注意CP_ACP和CP_UTF8的使......
  • python常用的进制、字符串、字节之间的转换
    整数之间的进制转换:10进制转16进制:hex(16) ==> 0x1016进制转10进制:int('0x10',16) ==> 16类似的还有oct(),bin()  字符串转整数:10进制字符串:int('10......
  • 字节一面:说说TCP的三次握手
    上周有朋友去了字节面试,问到了TCP三次握手的问题,当时回答的不是很好,对于三次握手的发送的报文信息都不太熟,本文主要做一下总结和记录。TCP全称为TransmissionControlP......
  • 字节笔试题
    求长度为n数组最大子数组乘积,数组元素只包括[0,1,2,4,8,…1024]输入:5[2,1,4,0,16,1]输出16依赖判断,不依赖输出1,依赖输出0(判断是否有环)给定数据为123表示1依赖......
  • 【Java学习Day08】数据类型、变量及字节
    数据类型强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用弱类型语言要求变量的使用要符合规定,所有变量都必须先定义后才能使用Java......