当前位置: 首页 > news >正文

做网站写页面多少钱苏州网站维护

做网站写页面多少钱,苏州网站维护,南通做网站需要多少钱,家装公司文案下面这段 C 代码的输出是什么&#xff1f;定义的 Type 占用的字节数&#xff08;下面简称为字节数&#xff09;是多少呢&#xff1f; #include <iostream>struct Type {char a;int b; };int main(void) {std::cout << sizeof(Type) << \n; }经过编译运行&am…

下面这段 C++ 代码的输出是什么?定义的 Type 占用的字节数(下面简称为字节数)是多少呢?

#include <iostream>struct Type {char a;int b;
};int main(void) {std::cout << sizeof(Type) << '\n';
}

经过编译运行,在 x86-64 Linux 机器上输出的结果是 8。如果将成员变量的字节数相加求和,等于 1 + 4 = 5 字节。那多出来的 3 字节做什么了?

一般,我们会把多出的 3 字节用来做字节对齐。也就引出了文章标题提出的问题:为什么要做字节对齐呢?多占用的字节有什么用处?

首先,程序加载进内存后,需要将指令、数据读取到 CPU 中;CPU 读取数据的速度要远远超过内存的。为了缓解速度差异,引入了 Cache 机制。

而在读写 Cache 中的数据时,一般都是按照一定大小来操作的,这个概念被称为 “Cache line”。在因特尔芯片中,一次操作的大小是 64 个字节。假如现在类型 Type 的对象存储在 Cache 的地址分别为 [60, 61, 62, 63, 64]。如果现在 CPU 去读这个对象,你会发现,它正好分布在两个 Cache line 中(分别是 [0,63] 和 [64, 127]),因此要读两次。

为了尽可能让每次操作都能够访问到完成的数据,而不是分两次进行。编程语言都会引入字节对齐 Alignment 机制(也与 C++ 的处理机制差不多):

  1. 首先,设定每一个基础类型的 alignment 大小,都是 2 的幂。C++ 在 x86-64 Linux 机器上的 alignment 情况如下表(可以通过 alignof(Type) 函数查看):

    类型sizeof(Type)alignof(Type)
    char (unsigned char)11
    short (unsigned short)22
    int (unsigned int)44
    long (unsigned long)88
    float44
    double88
    long double1616
    T*88
  2. 要求某一类型的第一个字节的地址能被 alignment 整除。也就是说,存放 int 值的地址必须是 4 的倍数。

  3. 如果是用户自定义类型,比如文章开头的 struct,它的 alignment 等于 max(所有成员变量的 alignment),也就是 int 类型的 4。

  4. 并且要求 sizeof(Type) 必须是 alignof(Type) 的倍数。

以 Type 为例,它的成员变量占用字节和为 5,不是 4 的倍数,所以要在 a 后面填充 3 个 byte 空闲字节,将 Type 字节数扩充为 8。你会发现 [8n, 8n+1,…, 8n+7] 总是会在一个 Cache line 里。

看到这有的朋友可能会问,这个真的一定会确保对象都在一个 Cache line 里吗?

答案是不能,比如将 Type 改写为下面的形式:

struct Type {char a;int b;int c;
};

首先,通过上面的讲解大家应该都能知道现在 sizeof(Type) == 12,但是 64 不能被 12 整除,也就无法保证对象一定在一次 Cache line 里。

也就是说,字节对齐只是尽可能减少对象需要 Cache line 的统计学次数。

关于不同字节数大小的类型,需要的访问 Cache line 预计次数,可以参考这篇文章。你会发现 9 和 12 字节的预计次数竟然是一样的!

总结

  • 字节对齐的目的是尽可能减少对象需要 Cache line 的统计学次数。
  • 而且,多占用的字节,无法直接访问。
http://www.tj-hxxt.cn/news/124751.html

相关文章:

  • 制作企业网站的步骤网站优化排名怎么做
  • 手机软件开发工程师网站seo优化案例
  • 机器设备行业网站模板网站关键词提升
  • 网站建设是不是可以免费建站网络营销的方法包括哪些
  • 合肥公司门户网站制作热搜榜上2023年热搜
  • 制作网站一般要多少钱新乡seo外包
  • 建网站免费吗北京百度快速优化排名
  • 做网站用的什么编程语言营销策略怎么写模板
  • dreamweaver网站制作杭州seo网
  • 手机微网站开发教程深圳网站推广公司
  • 网站建设技术咨询协议网站维护推广的方案
  • 免费小程序源码小程序seo
  • dw做游戏网站代码今日刚刚发生的军事新闻
  • 中国做乱的小说网站企业营销咨询
  • 如何架设网站服务器seo推广排名公司
  • 网站建设高端产品策划推广方案
  • 如何判断网站有cdn加速今天发生了什么重大新闻
  • 网页设计与网站开发的区别中国进入全国紧急状态
  • 快速搭建网站视频教程百度seo关键词优化电话
  • 获取网站服务器信息搜索软件排行榜前十名
  • 做动漫游戏网站企业文化ppt
  • 陕西省建设银行网站成都网络营销公司
  • 来推网站关于市场营销的培训课程
  • 智慧团建网页电脑版登录网站软文代写网
  • 网站浏览成交指标微信营销的优势
  • wordpress 更改数据库密码错误上海有哪些优化网站推广公司
  • 长沙百度做网站多少钱百度免费发布信息网站
  • b2c网站建设平台百度网址ip
  • 网站空间选linux简阳seo排名优化培训
  • php源码网站安装百度搜索什么关键词排名