⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 谈谈对齐(上) - fmddlmyy的专栏 - csdnblog.htm

📁 講述ARM下的字符數據對齊方式的內容
💻 HTM
📖 第 1 页 / 共 2 页
字号:
  <DD><A href="http://hi.baidu.com/fmddlmyy" target=_self>我的百度空间</A>
  <DT>存档
  <DD>
  <DIV class=publiclist_sidebar>
  <UL>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2009/02.aspx">2009年02月(3)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2009/01.aspx">2009年01月(6)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/12.aspx">2008年12月(7)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/11.aspx">2008年11月(7)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/10.aspx">2008年10月(2)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/09.aspx">2008年09月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/07.aspx">2008年07月(6)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/06.aspx">2008年06月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/05.aspx">2008年05月(4)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/04.aspx">2008年04月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/03.aspx">2008年03月(2)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2008/02.aspx">2008年02月(2)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2007/11.aspx">2007年11月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2007/06.aspx">2007年06月(3)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2007/04.aspx">2007年04月(2)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2007/03.aspx">2007年03月(2)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2007/02.aspx">2007年02月(3)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2006/07.aspx">2006年07月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2005/09.aspx">2005年09月(5)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2005/08.aspx">2005年08月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2005/06.aspx">2005年06月(1)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2005/05.aspx">2005年05月(2)</A>
    <LI><A 
    href="http://blog.csdn.net/fmddlmyy/archive/2005/04.aspx">2005年04月(3)</A></LI></UL></DIV><SPAN 
  id=RecentVisitors></SPAN><SPAN id=SubscriptionList>
  <DT>订阅我的博客
  <DD><A href="http://blog.csdn.net/fmddlmyy/Rss.aspx"><IMG alt=XML聚合 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/xml.gif" 
  border=0></A>&nbsp;&nbsp;<A href="http://feeds.feedsky.com/csdn.net/fmddlmyy" 
  target=_blank><IMG alt=FeedSky 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/feedsky.gif" border=0></A>
  <DD><A 
  href="http://www.xianguo.com/subscribe.php?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到鲜果 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_xianguo.jpg" border=0></A>
  <DD><A 
  href="http://fusion.google.com/add?feedurl=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到Google 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_google.gif" border=0></A>
  <DD><A 
  href="http://www.zhuaxia.com/add_channel.php?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到抓虾 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_zhuaxia.gif" border=0></A>
  <DD><A 
  href="http://www.bloglines.com/sub/http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到BlogLines 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_bloglines.gif" border=0></A>
  <DD><A 
  href="http://add.my.yahoo.com/rss?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到Yahoo 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_yahoo.gif" border=0></A>
  <DD><A 
  href="http://rss.gougou.com/find_rss.jsp?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到GouGou 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_gougou.gif" border=0></A>
  <DD><A 
  href="http://www.pageflakes.com/subscribe.aspx?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到飞鸽 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_pageflakes.gif" border=0></A>
  <DD><A 
  href="http://www.rojo.com/add-subscription?resource=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到Rojo 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_rojo.gif" border=0></A>
  <DD><A 
  href="http://www.newsgator.com/ngs/subscriber/subfext.aspx?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到newsgator 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_newsgator.gif" border=0></A>
  <DD><A 
  href="http://www.netvibes.com/subscribe.php?url=http://blog.csdn.net/fmddlmyy/Rss.aspx" 
  target=_blank><IMG alt=订阅到netvibes 
  src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/rss_netvibes.gif" 
  border=0></A></SPAN> </DD></DL></DIV></DIV></DIV>
<DIV id=csdnblog_content>
<DIV class=gutter>
<SCRIPT src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/PrintNotice.js" 
type=text/javascript></SCRIPT>

<DIV class=default_contents>
<DIV class=user_article>
<SCRIPT src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/LoadFeedbackCount.js" 
type=text/javascript></SCRIPT>

<H1><IMG height=16 alt=原创 
src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/authorship.gif" width=15 
border=0>&nbsp;<A 
href="http://blog.csdn.net/fmddlmyy/archive/2008/07/16/2663481.aspx">谈谈对齐(上)</A><CITE 
class=fav_csdnstylebykimi><A class=fav_csdnstylebykimi title=收藏到我的网摘中,并分享给我的朋友 
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</A></CITE></H1>
<DIV class=blogstory>
<SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>
&nbsp; 
<H1>谈谈对齐(上)</H1>
<P>对齐问题主要有3点:变量对齐、结构对齐和数据对齐。前两点是编译器决定的变量映射和结构布局。最后一点与CPU的架构(CISC/RISC)有关。</P>
<P>在大多数情况下,对齐是编译器和CPU的事情,和程序员没什么关系。但在某些情况下,程序员又必须考虑对齐问题,否则会有一些麻烦。</P>
<H2>0 约定和预备知识</H2>
<H3>0.1 地址边界</H3>
<P>如果把字节看作小房子,内存就是顺序排列的小房子。每个小房子都有一个顺序编号的门牌号码,例如:0,1,2,...,0xffffffff。我们把这个门牌号码称作地址。本文将2的整数倍的地址记作2n边界,将4的整数倍的地址记作4n边界,依此类推。显然每个地址都是1n边界,每个4n边界都是2n边界,每个8n边界都是4n边界。</P>
<P>所谓“对齐”就是把变量放在什么样的地址边界上,例如:1n边界,2n边界,还是4n边界。</P>
<H3>0.2 变量的分类</H3>
<P>分类源自角度。有多少角度,就有多少分类。最近经常被迫收听“One World, One 
dream”,其实在我看来,每个生命都有独一无二的梦想,何况国家。如果狗熊有宗教信仰,它心目中的上帝应该是一只相貌儒雅的狗熊吧。</P>
<H4>0.2.1 基本类型和复合类型</H4>
<P>从构成看,变量可以分为基本类型的变量和复合类型的变量。基本类型就是语言内部支持的简单类型,例如char, short, int, 
double等。复合类型由基本类型组成,例如结构。本文将基本类型的变量记作基本变量,将复合类型的变量记作复合变量或结构变量。</P>
<P>基本变量的长度目前有1、2、4、8字节。以后可能会有更大的基本变量。嵌入式环境通常不支持浮点,常见的长度是1、2、4字节。</P>
<H4>0.2.2 变量的地址</H4>
<P>从地址看,变量可以分成有确定地址的变量和没有确定地址的变量。所谓“有确定地址”就是指在程序运行前就有确定的地址。而“没有确定地址”的变量,它们的地址是在运行时确定的。</P>
<P>全局变量和静态变量都有确定地址。局部变量和动态分配的变量没有确定地址。本文将有确定地址的变量记作有址变量。</P>
<H2>1 变量对齐</H2>
<H3>1.1 没有确定地址的变量</H3>
<P>局部变量是从堆栈分配的,编译器通常会保证每个局部变量的地址都在4n边界上。</P>
<P>动态分配的变量是从堆上分配。堆的实现与标准库和操作系统有关。在一些简单的嵌入式系统中,我们需要自己实现动态内存分配,这时我们要保证每次分配的内存块地址都在4n边界上,以避免后面谈到的数据对齐问题。</P>
<H3>1.2 有确定地址的变量</H3>
<P>有址变量的地址是在链接时确定的。编译器通常有设置变量对齐方式的编译选项,我们通常使用该选项的默认值。在默认情况下,编译器会按照默认方式对齐放置有址变量。</P>
<P>所谓按“按默认方式对齐”,就是将长度为1的基本变量放在1n边界上。将长度为2的基本变量放在2n边界上。将长度为4的基本变量放在4n边界上,依此类推。</P>
<P>每个结构变量总是由一个个基本变量构成。结构变量按照该结构中最长的基本变量对齐。如果某个结构基本变量的最大长度是1,编译器就可以把这个结构放在1n边界上。如果某个结构基本变量的最大长度是4,编译器就应该把这个结构放在4n边界上。</P>
<P>那么结构中的成员变量又是怎样对齐的?</P>
<P class="right articalinfo">发表于 @ <A title=permalink 
href="http://blog.csdn.net/fmddlmyy/archive/2008/07/16/2663481.aspx">2008年07月16日 
23:41:00</A>|<A title=评论 
href="http://blog.csdn.net/fmddlmyy/archive/2008/07/16/2663481.aspx#FeedBack">评论(<SPAN 
id=FeedbackCount_2663481>loading...</SPAN>
<SCRIPT type=text/javascript>AddFeedbackCountStack("2663481")</SCRIPT>
)</A>|<A title=编辑 
href="http://writeblog.csdn.net/PostEdit.aspx?entryId=2663481">编辑</A>|<CITE 
class=fav_csdnstylebykimi><A class=fav_csdnstylebykimi title=收藏到我的网摘中,并分享给我的朋友 
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</A></CITE></P><SPAN 
id=Post.ascx_ViewPost_PreviousAndNextEntriesDown>
<H3><A 
href="http://blog.csdn.net/fmddlmyy/archive/2008/07/17/2668634.aspx">新一篇:&nbsp;谈谈对齐(中)</A>&nbsp;|&nbsp;<A 
href="http://blog.csdn.net/fmddlmyy/archive/2008/07/15/2656344.aspx">旧一篇:&nbsp;一个编译器的小陷阱</A></H3></SPAN></DIV>
<DIV id=Post.ascx_TagAd_palTagAd>
<DIV class=tagadfornews id=csdn_tag_adstyle></DIV></DIV></DIV>
<DIV class=commentslist><SPAN id=Anthem_Post.ascx_Comments_ltlComments__><SPAN 
id=Post.ascx_Comments_ltlComments>
<DIV id=commentslist>
<H3>评论:没有评论。</H3></DIV></SPAN></SPAN></DIV>
<DIV class=spacecommment>
<DIV id=Anthem_Post.ascx_PostComment_CommentUpdatePanel__>
<DIV id=Post.ascx_PostComment_CommentUpdatePanel>
<FIELDSET><LEGEND>发表评论<DFN>只有登录用户才能发表评论!<A 
href="http://passport.csdn.net/member/UserLogin.aspx?from=http://blog.csdn.net/fmddlmyy/archive/2008/07/16/2663481.aspx">登录</A>&nbsp;<A 
href="http://passport.csdn.net/CSDNUserRegister.aspx">注册</A></DFN></LEGEND><EM><IMG 
alt=只有登录用户才能发表评论!请登录或注册 
src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/blog_commentnotice.gif"></EM> 
</FIELDSET> </DIV></DIV></DIV>
<SCRIPT type=text/javascript>
    LoadFeedbackCount();//加载评论
    document.write("<img src='http://counter.csdn.net/pv.aspx?id=24' border=0 width=0 height=0>");// 计数器
    
    </SCRIPT>
</DIV></DIV></DIV>
<DIV id=pubfooter>
<DL>
  <DT>
  <DD>Csdn Blog version 3.1a 
  <DD>Copyright © 吕杰 </DD></DL></DIV></DIV></FORM>
<SCRIPT src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/counter.js" 
type=text/javascript></SCRIPT>
<!-- *** Vdoing Code *** -->
<SCRIPT src="谈谈对齐(上) - fmddlmyy的专栏 - CSDNBlog.files/34089.js" 
type=text/javascript charset=UTF-8></SCRIPT>
<NOSCRIPT><A title="Vdoing StatsX No.34089" href="http://www.vdoing.com/"><IMG 
src="" border=0></A></NOSCRIPT> 
<!-- *** End of Vdoing Code *** --></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -