• <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>

            happem

            C基礎:內存耗盡怎么辦?

             如果在申請動態內存時找不到足夠大的連續字節內存塊,malloc()new()會使用不同的方式宣告內存申請失敗,通常有如下幾種方式處理“內存耗盡”問題:

            1.         判斷指針是否為NULL,如果是則立刻用return語句終止本函數。例如:

            Void Func(void)

             {

                 A *a=new(nothrow) A

                 Ifa==NULLreturn

                 ……

            }

            2.         判斷指針是否為NULL,如果是則立刻用exit(1)終止整個程序的運行,例如:

            Void Funcvoid

             {

                 A *a=new(nothrow) A

                 Ifa==NULLexit(1)

            }

            3.         newmalloc()預設異常處理函數,例如,Visual C++可以用_set_new_hander函數為new設置用戶自定義異常處理函數,也可以讓malloc()享用與new相同的異常處理函數。

            4.         捕獲new拋出的異常,并嘗試從中恢復。

             上述(1)和(2)兩種方式使用最普通。如果一個函數內有多處需要動態申請內存,那么方式(1)就顯得力不從心,應該用方式(2)來處理。不過在C++中我們提倡使用方式(4)

             有一個很重要的現象要告訴大家:

                對于32位以上的應用程序而言,一般情況下使用malloc()new幾乎不可能導致‘內存耗盡’。我在windows98下用Visual C++編寫了測試程序:

             這個程序無休地運行下去,根本不會終止,因為32位操作系統支持‘虛存’,內存用完了,自動用硬件空間頂替。

               Void main()

            {  

                 Int *p=NULL

                 Unsigned int len=1024*1024

                 While1{

                    P=new(nothrow) int[len] //或者 malloc(sizeof(int)*len)

                     If(!p){

                       Len>>=1;                //len縮小一半

                     Iflen==0

                     Exit(1)

                    Continue

            }

             Cout<<Allocated:”<<“(len*sizeof(int))”<<bytes.<<endl

            }

            }

            可以得出一個結論:

               對于32位以上應用程序,內存耗盡錯誤處理程序幾乎毫無用處,但是必須強調不加錯誤處理將導致程序的質量很差,千萬不可因小失大。

            posted on 2012-08-21 10:03 happem 閱讀(426) 評論(0)  編輯 收藏 引用

            久久人人妻人人爽人人爽| 色偷偷888欧美精品久久久| 国产亚洲婷婷香蕉久久精品| 久久精品国产色蜜蜜麻豆| 久久亚洲AV永久无码精品| 99久久无码一区人妻| 91精品国产91久久综合| 91久久精一区二区三区大全| 五月丁香综合激情六月久久| 色诱久久久久综合网ywww| 亚洲欧美一区二区三区久久| 久久久午夜精品福利内容| 日韩久久久久中文字幕人妻| 久久久久国产一区二区三区| 久久无码AV中文出轨人妻| 一本色综合久久| 波多野结衣AV无码久久一区| 国产V综合V亚洲欧美久久| 91久久精品电影| 亚洲日韩欧美一区久久久久我| 蜜臀久久99精品久久久久久| 人妻丰满?V无码久久不卡| 久久午夜无码鲁丝片秋霞| 久久亚洲AV成人无码电影| 99精品国产在热久久无毒不卡| 久久精品九九亚洲精品天堂| 久久乐国产精品亚洲综合| 漂亮人妻被中出中文字幕久久| 久久综合给合久久狠狠狠97色| 日韩欧美亚洲综合久久影院d3| 久久午夜综合久久| 久久精品亚洲一区二区三区浴池 | 久久综合综合久久狠狠狠97色88| 日本道色综合久久影院| 大香伊人久久精品一区二区| 久久精品九九亚洲精品天堂| 久久99精品国产麻豆宅宅| 久久精品国产亚洲麻豆| 亚洲精品无码久久久久去q | 伊人热热久久原色播放www| 久久91精品综合国产首页|