📄 谈谈对齐 - c-c++ - embeded linux.htm
字号:
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87332.html">·
ARM<!-- a87332 --></A><!-- 87332 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87432.html">·
BootLoader<!-- a87432 --></A><!-- 87432 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87334.html">·
Driver<!-- a87334 --></A><!-- 87334 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87333.html">·
Kernel<!-- a87333 --></A><!-- 87333 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87331.html">·
C/C++<!-- a87331 --></A><!-- 87331 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_101214.html">·
Algorithm&Data Structure<!-- a101214 --></A><!-- 101214 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_89413.html">·
Application develop<!-- a89413 --></A><!-- 89413 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_90190.html">·
Linux Shell<!-- a90190 --></A><!-- 90190 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87335.html">·
Linux Administration<!-- a87335 --></A><!-- 87335 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_93952.html">·
Memory Management<!-- a93952 --></A><!-- 93952 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87329.html">·
Electronics<!-- a87329 --></A><!-- 87329 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_89405.html">·
all other stuff<!-- a89405 --></A><!-- 89405 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87330.html">·
Hardware Microchip<!-- a87330 --></A><!-- 87330 -->
<LI><A href="http://blog.chinaunix.net/u2/70445/article_87336.html">·
Motivation<!-- a87336 --></A><!-- 87336 --> </LI></UL></LI>
<LI class=ul0><A class=list1
href="http://blog.chinaunix.net/u2/70445/index.html">首页</A> </LI></UL></TD>
<TD width=10></TD></TR>
<TR>
<TD colSpan=4>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width=980 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>function $(s){return document.getElementById(s);}function ShowHideDiv(divid,iImg){if($(divid).style.display == "none"){iImg.src="../../templates/newgreen/images/dot2.gif";$(divid).style.display = "block";iImg.title="收起";}else{iImg.src="../../templates/newgreen/images/dot4.gif";$(divid).style.display = "none";iImg.title="展开";}}navHover();</SCRIPT>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=3></TD></TR></TBODY></TABLE><BR>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0
cellPadding=0 width="90%" align=center border=0>
<TBODY>
<TR>
<TD width=18 height=28><IMG alt=""
src="谈谈对齐 - C-C++ - Embeded Linux.files/bg_art_left_top.gif" border=0></TD>
<TD background="谈谈对齐 - C-C++ - Embeded Linux.files/bg_art_top.gif">
<P style="MARGIN: 5px; LINE-HEIGHT: 150%"></P></TD>
<TD width=18 height=28><IMG alt=""
src="谈谈对齐 - C-C++ - Embeded Linux.files/bg_art_right_top.gif"
border=0></TD></TR>
<TR>
<TD width=18
background="谈谈对齐 - C-C++ - Embeded Linux.files/bg_art_left.gif"></TD>
<TD align=middle bgColor=#f5fdee><BR><FONT style="FONT-SIZE: 14pt"
color=#295200><B>谈谈对齐</B></FONT>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#a5bd6b cellSpacing=1
cellPadding=0 width="100%" border=1>
<TBODY>
<TR>
<TD align=middle>
<TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle>
<TABLE
style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV id=art style="MARGIN: 15px"><SPAN
class=Apple-style-span
style="LINE-HEIGHT: 18px; FONT-FAMILY: verdana">
<P
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">对齐问题主要有3点:变量对齐、结构对齐和数据对齐。前两点是编译器决定的变量映射和结构布局。最后一点与CPU的架构(CISC/RISC)有关。</P>
<P
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">在大多数情况下,对齐是编译器和CPU的事情,和程序员没什么关系。但在某些情况下,程序员又必须考虑对齐问题,否则会有一些麻烦。</P>
<H2
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">0
约定和预备知识</H2>
<H3
style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; PADDING-RIGHT: 0.6em; BORDER-TOP: rgb(204,204,204) 1px dotted; PADDING-LEFT: 0.6em; FONT-SIZE: 12px; PADDING-BOTTOM: 0.6em; MARGIN: 6px 0px 0px; BORDER-LEFT: rgb(204,204,204) 1px dotted; PADDING-TOP: 0.6em; BORDER-BOTTOM: rgb(204,204,204) 1px dotted; FONT-FAMILY: 'Microsoft yahei', verdana, sans-serif">0.1
地址边界</H3>
<P
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">如果把字节看作小房子,内存就是顺序排列的小房子。每个小房子都有一个顺序编号的门牌号码,例如:0,1,2,...,0xffffffff。我们把这个门牌号码称作地址。本文将2的整数倍的地址记作2n边界,将4的整数倍的地址记作4n边界,依此类推。显然每个地址都是1n边界,每个4n边界都是2n边界,每个8n边界都是4n边界。</P>
<P
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">所谓“对齐”就是把变量放在什么样的地址边界上,例如:1n边界,2n边界,还是4n边界。</P>
<H3
style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; PADDING-RIGHT: 0.6em; BORDER-TOP: rgb(204,204,204) 1px dotted; PADDING-LEFT: 0.6em; FONT-SIZE: 12px; PADDING-BOTTOM: 0.6em; MARGIN: 6px 0px 0px; BORDER-LEFT: rgb(204,204,204) 1px dotted; PADDING-TOP: 0.6em; BORDER-BOTTOM: rgb(204,204,204) 1px dotted; FONT-FAMILY: 'Microsoft yahei', verdana, sans-serif">0.2
变量的分类</H3>
<P
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">分类源自角度。有多少角度,就有多少分类。最近经常被迫收听“One
World, One
dream”,其实在我看来,每个生命都有独一无二的梦想,何况国家。如果狗熊有宗教信仰,它心目中的上帝应该是一只相貌儒雅的狗熊吧。</P>
<H4
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">0.2.1
基本类型和复合类型</H4>
<P
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">从构成看,变量可以分为基本类型的变量和复合类型的变量。基本类型就是语言内部支持的简单类型,例如char,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -