前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中字节对齐问题分析1

C语言中字节对齐问题分析1

作者头像
随心助手
发布2020-05-12 15:33:26
1.3K0
发布2020-05-12 15:33:26
举报
文章被收录于专栏:nginx遇上redisnginx遇上redis

作者:李云

摘要

字节对齐(alignment)是CPU在性能方面所面临的一个非常重要的问题。有些处理器能自动处理不对齐数据的访问(对字节对齐要求不严格),但是,有些处理器却无法处理(对字节对齐要求很严格)。当处理器无法处理对齐问题时,其将引发一个异常(exception),当然从程序的角度来说就是出错(crash)。

对于c程序员,大部分情况下我们并不考虑字节对齐问题,这并不是说我们并不需要考虑,而是因为碰到这种问题的情况很少。一方面要在特定的处理器上,而另一方面和我们写的程序也有关系。只有两个条件同时满足时问题才会出现。因此,结果给我们的感觉是”字节对齐与我无关”。

本文通过一小段代码通过在不同处理器上的运行结果引出对字节对齐问题的关注,同时进行原因分析。

  1. 1. 问题的引入

下面是一段被简化的程序,分别在windows(32位x86处理器)和solaris(32位的SPARC处理器)上编译和运行,其结果将完全不同。在windows上程序运行正常,但是在solaris上程序运行会出错,并且会在终端上打出”Bus Error”以及产生一个”Core Dump”文件。

typedef struct
{
       Short  mark;
Char body[128];
}msg_t;
typedef struct
{
       char *pointer;
}header_t;
Int main(){
       msg_t msg = {0};
       void *p=((header_t*)msg.body)->pointer;
       return 0;
}

为什么这么简单的一段程序在不同的操作系统(其实是处理器)上的运行结果却决然不同?这其实是一个cpu对齐所引发的问题,下面我们通过对字节对齐问题的分析来探究其背后的原理。后面的分析我们全部针对运行在32位SPARC处理器上的Solaris操作系统进行的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx遇上redis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档