?? 談談對齊 - 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">如果把字節(jié)看作小房子,內存就是順序排列的小房子。每個小房子都有一個順序編號的門牌號碼,例如: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 + -