記憶體管理checklist

來源:互聯網
上載者:User

(1) 棧上變數必須初始化

(2) 從堆上分配的記憶體必須初始化

(3) 棧上局部變數是否有大陣列變數,導致棧超出預設限制溢出 

(4) 棧中是否有不合理的遞迴,導致棧超出預設限制溢出 

(5) 必須對記憶體耗盡的情況進行處理. 注意new在記憶體不足時的處理方式

(6) 釋放某個指標後,必須將該指標變數賦值為NULL, 避免野指標的出現

(7) 禁止對同一指標delete或者free兩次或以上

(8) 對數組操作,必須強制確保下標不會越界

(9) 避免頻繁的不等長小記憶體申請和釋放

(10) 記憶體申請和釋放必須配對,防止記憶體流失

(11) 析構數群組類型必須使用[] delete形式

(12)  free和malloc, delete和new 必須配對使用,不能混用

(13) 線程的使用也是佔用了記憶體,是否考慮到了線程釋放

(14) 對於覆蓋標準的operator new和operator delete函數, 必須配對重寫

(15) 對於記憶體長度,不能靠自己計算,必須使用sizeof和注意位元組對齊

(16) 對於C字串,是否考慮到字串末位的'/0'結束符, 比如: char *p = "WoKao"; char buffer[5]; strpcy(buffer, p);

(17) 使用strcpy(char *dest, const char *src)等str系列函數,是否考慮到了dest緩衝溢出的情況, 應該優先確保dest不會溢出或者使用n族函數

(18) 使用int sprintf(char *string, char *farmat [,argument,...]);函數的時候是否考慮到了溢出,應該優先確保string不會溢出或者使用snprintf函數

(19) 使用fgets函數替代gets

(20) mem族函數注意確保操作空間不會溢出

(21) 進行記憶體拷貝,賦值或者初始化的時候,盡量用mem函數族替代迴圈操作

(22) 小心指標和數組的區別, 比如const char *p = "12345678", char buffer[] = "12345678"; cout<<sizeof(p)<<endl, cout<<sizeof(buffer)<<endl;等等

(23) 是否試圖修改常量字串,比如const char* p = "WoKao", p[0] ='R';

(24) 是否考慮數組名作為函數參數傳遞時,數組退化為指標。

(25) 注意避免大量臨時對象的產生導致記憶體的急速消耗, 比如連續的很長的 string + 操作

(26) 注意避免對臨時對象進行引用,比如 string a = "123"; string b = "456"; const char* p = (a + b).c_str();

(27) 在函數參數傳遞時,盡量使用指標或者引用,避免直接傳值操作,特別是大物件類型

(28) 對於auto_ptr智能指標的使用,是否考慮到了所有權的轉移,導致的記憶體釋放

(29) 對於vector類,是否考慮到了其內部記憶體不足時,其自動擴充2倍記憶體機制,對程式運行是否有影響

(30) 在使用STL string類的時候,是否考慮了string類實現的多樣性對程式的影響。

(31) 在某個模組,對象需要結束其生命週期的時候,是否釋放了其對應的記憶體資源。比如C++的解構函式中是否delete了其對應的記憶體資源

(32) 小心共用記憶體上存放有vtable的對象,另外一個進程進行刪除時,導致非法訪問

(33) 不能夠對含有vtable的對象進行memset初始化

(34) 計算結構變數位移必須使用offsetof

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.