• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            旅途

            如果想飛得高,就該把地平線忘掉

            C++堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區

            在C++中,內存分成5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
            ??? 棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變量的存儲區。里面的變量通常是局部變量、函數參數等。
            ??? 堆,就是那些由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,那么在程序結束后,操作系統會自動回收。
            ??? 自由存儲區,就是那些由malloc等分配的內存塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。
            ??? 全局/靜態存儲區,全局變量和靜態變量被分配到同一塊內存中,在以前的C語言中,全局變量又分為初始化的和未初始化的,在C++里面沒有這個區分了,他們共同占用同一塊內存區。
            ??? 常量存儲區,這是一塊比較特殊的存儲區,他們里面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)
            明確區分堆與棧
            ??? 在bbs上,堆與棧的區分問題,似乎是一個永恒的話題,由此可見,初學者對此往往是混淆不清的,所以我決定拿他第一個開刀。
            ??? 首先,我們舉一個例子:
            ??? void f() { int* p=new int[5]; }
            ??? 這條短短的一句話就包含了堆與棧,看到new,我們首先就應該想到,我們分配了一塊堆內存,那么指針p呢?他分配的是一塊棧內存,所以這句話的意思就是: 在棧內存中存放了一個指向一塊堆內存的指針p。在程序會先確定在堆中分配內存的大小,然后調用operator new分配內存,然后返回這塊內存的首地址,放入棧中,他在VC6下的匯編代碼如下:
            ??? 00401028?? push??????? 14h
            ??? 0040102A?? call??????? operator new (00401060)
            ??? 0040102F?? add???????? esp,4
            ??? 00401032?? mov???????? dword ptr [ebp-8],eax
            ??? 00401035?? mov???????? eax,dword ptr [ebp-8]
            ??? 00401038?? mov???????? dword ptr [ebp-4],eax
            ??? 這里,我們為了簡單并沒有釋放內存,那么該怎么去釋放呢?是delete p么?澳,錯了,應該是delete []p,這是為了告訴編譯器:我刪除的是一個數組,VC6就會根據相應的Cookie信息去進行釋放內存的工作。
            ??? 好了,我們回到我們的主題:堆和棧究竟有什么區別?
            ??? 主要的區別由以下幾點:
            ??? 1、管理方式不同;
            ??? 2、空間大小不同;
            ??? 3、能否產生碎片不同;
            ??? 4、生長方向不同;
            ??? 5、分配方式不同;
            ??? 6、分配效率不同;
            ??? 管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產生memory leak。

            posted on 2007-09-06 01:59 旅途 閱讀(302) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            亚洲国产成人乱码精品女人久久久不卡 | 久久亚洲天堂| 精品久久久久久综合日本| 亚洲人成伊人成综合网久久久| 久久w5ww成w人免费| 久久99精品国产99久久6男男| 亚洲午夜精品久久久久久app| 欧美亚洲国产精品久久| 91久久国产视频| 色综合合久久天天综合绕视看 | 亚洲成色999久久网站| 久久久久黑人强伦姧人妻| 精品国产一区二区三区久久久狼| 色综合久久中文综合网| 久久AV无码精品人妻糸列| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 狠狠色丁香婷综合久久| 四虎亚洲国产成人久久精品| 国产精品va久久久久久久| 久久久久夜夜夜精品国产| 99久久国产精品免费一区二区| 国产亚洲精久久久久久无码77777| 天天爽天天狠久久久综合麻豆| 国产高清美女一级a毛片久久w| 亚洲精品综合久久| AV狠狠色丁香婷婷综合久久| 久久久久久久综合日本| 精品久久久久成人码免费动漫| 亚洲欧洲精品成人久久奇米网| 久久精品蜜芽亚洲国产AV| 国产精品中文久久久久久久| 少妇无套内谢久久久久| 国产精品久久久久久福利漫画| 狠狠色丁香婷婷综合久久来| 久久99亚洲网美利坚合众国| 精品国产婷婷久久久| 久久综合综合久久97色| 亚洲色大成网站WWW久久九九| 亚洲国产成人乱码精品女人久久久不卡| 久久久精品日本一区二区三区| 色婷婷噜噜久久国产精品12p|