?? [c++對象模型][5]堆棧與函數(shù)調(diào)用 - itech's blog - 博客園.htm
字號:
?<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0060)http://www.cnblogs.com/itech/archive/2009/02/23/1395515.html -->
<HTML><HEAD id=Head><TITLE>[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META id=metaKeywords content=[Cpp對象模型],C,對象模型,5,堆棧與函數(shù)調(diào)用 name=keywords>
<META
content=一C++程序內(nèi)存分配1)在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,一般使用寄存器來存取,效率很高,但是分配的內(nèi)存容量有限。2)從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用mallo
name=description><LINK id=CommondCss
href="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/common.css" type=text/css
rel=stylesheet><LINK id=MainCss
href="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/style.css" type=text/css
rel=stylesheet><LINK id=CommondCss2
href="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/common2.css" type=text/css
rel=stylesheet><LINK id=RSSLink title=RSS
href="http://www.cnblogs.com/itech/rss" type=application/rss+xml
rel=alternate><LINK id=RSDLink title=RSD
href="http://www.cnblogs.com/itech/rsd.xml" type=application/rsd+xml
rel=EditURI>
<SCRIPT src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/common.js"
type=text/javascript></SCRIPT>
<META content="MSHTML 6.00.2900.3492" name=GENERATOR></HEAD>
<BODY>
<FORM id=Form1 name=Form1 onsubmit="javascript:return WebForm_OnSubmit();"
action=1395515.html method=post>
<DIV><INPUT id=__EVENTTARGET type=hidden name=__EVENTTARGET> <INPUT
id=__EVENTARGUMENT type=hidden name=__EVENTARGUMENT> <INPUT
id=" __VIEWSTATE" type=hidden name=__VIEWSTATE> </DIV>
<SCRIPT type=text/javascript>
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</SCRIPT>
<SCRIPT src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/WebResource.axd"
type=text/javascript></SCRIPT>
<SCRIPT language=JavaScript>
function ctlent(evt,id)
{
if(evt.ctrlKey && evt.keyCode == 13)
{
try
{
TempSave(id);
}
catch(ex)
{
}
finally
{
__doPostBack('AjaxHolder$PostComment$btnSubmit','')
}
}
}</SCRIPT>
<SCRIPT language=JavaScript>function SetReplyAuhor(author){document.getElementById('AjaxHolder_PostComment_tbComment').value+="@"+author+"\n";document.getElementById('AjaxHolder_PostComment_tbComment').focus();return false}</SCRIPT>
<SCRIPT src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/ScriptResource.axd"
type=text/javascript></SCRIPT>
<SCRIPT
src="D:\c++內(nèi)存模型\[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files\ScriptResource(1).axd"
type=text/javascript></SCRIPT>
<SCRIPT
src="D:\c++內(nèi)存模型\[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files\ScriptResource(2).axd"
type=text/javascript></SCRIPT>
<SCRIPT src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/js"
type=text/javascript></SCRIPT>
<SCRIPT type=text/javascript>
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</SCRIPT>
<!--done-->
<DIV id=home>
<DIV id=header>
<DIV id=blogTitle><A id=lnkBlogLogo href="http://www.cnblogs.com/itech/"><IMG
id=blogLogo alt=返回主頁
src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/logo.png"></A> <!--done-->
<H1><A class=headermaintitle id=Header1_HeaderTitle
href="http://www.cnblogs.com/itech/">iTech's Blog</A></H1>
<H2>編程語言(C++,C++/CLI,C#&Python)架構(gòu)設(shè)計(Design
pattern&Architecture)系統(tǒng)內(nèi)核(Windows&Linux)!<A
href="http://www.cnblogs.com/itech/articles/1363498.html"><IMG
src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/o_icon_sub_c1s17.gif"></A>
</H2></DIV><!--end: blogTitle 博客的標(biāo)題和副標(biāo)題 -->
<DIV style="DISPLAY: none"><IMG
src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/body.gif"></DIV>
<DIV id=navigator><!--done-->
<UL id=navList>
<LI><A class=menu id=MyLinks1_HomeLink href="http://www.cnblogs.com/">博客園</A>
</LI>
<LI><A class=menu id=MyLinks1_SpaceLink
href="http://space.cnblogs.com/">社區(qū)</A> </LI>
<LI><A class=menu id=MyLinks1_MyHomeLink
href="http://www.cnblogs.com/itech/">首頁</A> </LI>
<LI><A class=menu id=MyLinks1_NewPostLink
href="http://www.cnblogs.com/itech/admin/EditPosts.aspx?opt=1">新隨筆</A> </LI>
<LI><A class=menu id=MyLinks1_ContactLink accessKey=9
href="http://www.cnblogs.com/itech/contact.aspx?id=1">聯(lián)系</A> </LI>
<LI><A class=menu id=MyLinks1_Admin
href="http://www.cnblogs.com/itech/admin/EditPosts.aspx">管理</A> </LI>
<LI><A class=menu id=MyLinks1_Syndication
href="http://www.cnblogs.com/itech/rss">訂閱</A> <A class=aHeaderXML
id=MyLinks1_XMLLink href="http://www.cnblogs.com/itech/rss"><IMG
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
alt=訂閱 src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/rss.gif"></A>
</LI></UL>
<DIV class=blogStats><!--done-->隨筆- 17 文章- 14 評論- 5 </DIV><!--end: blogStats --></DIV><!--end: navigator 博客導(dǎo)航欄 --></DIV><!--end: header 頭部 -->
<DIV id=main>
<DIV id=topicList>
<DIV class=forFlow>
<SCRIPT type=text/javascript>
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]>
</SCRIPT>
<!--done-->
<DIV id=topics>
<DIV class=post>
<H1 class=postTitle><A class=postTitle2 id=AjaxHolder_ctl01_TitleUrl
href="http://www.cnblogs.com/itech/archive/2009/02/23/1395515.html">[C++對象模型][5]堆棧與函數(shù)調(diào)用</A>
</H1>
<DIV class=clear></DIV>
<DIV class=postBody>
<P>一 C++程序內(nèi)存分配</P>
<P><SPAN style="COLOR: #ff0000">1)
在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,一般使用寄存器來存取,效率很高,但是分配的內(nèi)存容量有限。
<BR>2)
從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free或delete來釋放內(nèi)存。動態(tài)內(nèi)存的生存期由程序員自己決定,使用非常靈活。
<BR>3) 從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量,static變量。 <BR>4)
文字常量分配在文字常量區(qū),程序結(jié)束后由系統(tǒng)釋放。 <BR>5)程序代碼區(qū)。 </SPAN></P>
<P>經(jīng)典實例:</P>
<P> </P>
<DIV class=cnblogs_code><IMG id=Code_Closed_Image_170313 style="DISPLAY: none"
onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_170313').style.display='none'; document.getElementById('Code_Open_Image_170313').style.display='inline'; document.getElementById('Code_Open_Text_170313').style.display='inline';"
height=16
src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/ContractedBlock.gif"
width=11 align=top><IMG id=Code_Open_Image_170313
onclick="this.style.display='none'; document.getElementById('Code_Open_Text_170313').style.display='none'; getElementById('Code_Closed_Image_170313').style.display='inline'; getElementById('Code_Closed_Text_170313').style.display='inline';"
height=16
src="[C++對象模型][5]堆棧與函數(shù)調(diào)用 - iTech's Blog - 博客園.files/ExpandedBlockStart.gif"
width=11 align=top><SPAN class=cnblogs_code_Collapse
id=Code_Closed_Text_170313>Code</SPAN><SPAN id=Code_Open_Text_170313> <BR><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><SPAN
style="COLOR: #000000">#include </SPAN><SPAN
style="COLOR: #000000"><</SPAN><SPAN
style="COLOR: #0000ff">string</SPAN><SPAN
style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000">
<BR><BR></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN
style="COLOR: #000000"> a</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN
style="COLOR: #800080">0</SPAN><SPAN style="COLOR: #000000">;
</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">全局初始化區(qū)</SPAN><SPAN style="COLOR: #008000">
<BR></SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN
style="COLOR: #000000">p1; </SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">全局未初始化區(qū)</SPAN><SPAN
style="COLOR: #008000"> <BR></SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> main() <BR>{
<BR> </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN
style="COLOR: #000000"> b;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">棧</SPAN><SPAN style="COLOR: #008000"> <BR></SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000"> s[]</SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN
style="COLOR: #800000">abc</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN
style="COLOR: #000000">; </SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">棧</SPAN><SPAN
style="COLOR: #008000"> <BR></SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">char</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN
style="COLOR: #000000">p2;
</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">棧</SPAN><SPAN style="COLOR: #008000"> <BR></SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">char</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN
style="COLOR: #000000">p3</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN
style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">123456</SPAN><SPAN
style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">;
</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">123456\0在常量區(qū),p3在棧上。</SPAN><SPAN style="COLOR: #008000">
<BR></SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">static</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN
style="COLOR: #000000"> c</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN
style="COLOR: #800080">0</SPAN><SPAN style="COLOR: #000000">;
</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">全局(靜態(tài))初始化區(qū)</SPAN><SPAN style="COLOR: #008000">
<BR></SPAN><SPAN style="COLOR: #000000"> p1 </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN
style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN
style="COLOR: #000000">)malloc(</SPAN><SPAN
style="COLOR: #800080">10</SPAN><SPAN style="COLOR: #000000">);
<BR> p2 </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN
style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN
style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">)malloc(</SPAN><SPAN
style="COLOR: #800080">20</SPAN><SPAN style="COLOR: #000000">);
</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">分配得來得10和20字節(jié)的區(qū)域就在堆區(qū)。</SPAN><SPAN style="COLOR: #008000">
<BR></SPAN><SPAN style="COLOR: #000000">
strcpy(p1,</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -