国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

C語(yǔ)言和C++內存分配的實(shí)現

發(fā)布時(shí)間:2021-09-04 11:55 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 開(kāi)發(fā)技術(shù)

本篇內容主要講解“C語(yǔ)言和C++內存分配的實(shí)現”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“C語(yǔ)言和C++內存分配的實(shí)現”吧!

目錄
  • 1 內存分布圖

  • 2 C語(yǔ)言和C++內存分配實(shí)現

    • 2.1 C語(yǔ)言實(shí)現

    • 2.2 C++實(shí)現

      • new的原理

      • delete的原理

  • 3 C語(yǔ)言和C++內存管理區別

    • 4 內存泄漏

      1 內存分布圖


      注意:

      1.向下生長(cháng):地址由高到低
      2.向上生長(cháng):地址由低到高
      3.棧又叫堆棧,非靜態(tài)局部變量/函數參數/返回值等等
      4.堆用于程序運行時(shí)動(dòng)態(tài)內存分配

      2 C語(yǔ)言和C++內存分配實(shí)現

      2.1 C語(yǔ)言實(shí)現

      malloc函數

       void *malloc(size_t size)

      分配所需的內存空間,單位是字節,并返回一個(gè)指向它的指針。

      int* ptr_int = (int*)malloc(4*sizeof(int));//開(kāi)辟空間
      free(ptr_int);//釋放空間

      calloc函數

      void *calloc(size_t nitems, size_t size)

      分配所需的內存空間,并返回一個(gè)指向它的指針。nitems – 要被分配的元素個(gè)數。size – 元素的大小。malloc 和 calloc 之間的不同點(diǎn)是,malloc 不會(huì )設置內存為零,而 calloc 會(huì )設置分配的內存為零。

      char* ptr_char = (char*)calloc(4, sizeof(char));
      free(ptr_char);

      realloc

      void *realloc(void *ptr, size_t size)

      嘗試重新調整之前調用 malloc 或 calloc 所分配的ptr 所指向的內存塊的大小。ptr – 指針指向一個(gè)要重新分配內存的內存塊,該內存塊之前是通過(guò)調用 malloc、calloc 或 realloc 進(jìn)行分配內存的。如果為空指針,則會(huì )分配一個(gè)新的內存塊,且函數返回一個(gè)指向它的指針。

      size – 內存塊的新的大小,以字節為單位。如果大小為 0,且 ptr 指向一個(gè)已存在的內存塊,則 ptr 所指向的內存塊會(huì )被釋放,并返回一個(gè)空指針。

      int* ptr_int = (int*)malloc(4*sizeof(int));
      char* ptr_char = (char*)calloc(4, sizeof(char));
      
      int* ptr_int1 = (int*)realloc(ptr_int, 8 * sizeof(int));
      char* ptr_char1 = (char*)realloc(ptr_char, 8 * sizeof(char));

      2.2 C++實(shí)現


      new和delete的實(shí)現原理

      1 內置類(lèi)型

      • 如果申請的是內置類(lèi)型的空間,new和malloc,delete和free基本類(lèi)似,不同的地方是:new/delete申請和釋放的是單個(gè)元素的空間,new[]和delete[]申請的是連續空間,而且new在申請空間失敗時(shí)會(huì )拋異常,malloc會(huì )返回NULL。

      2 自定義類(lèi)型

      new的原理

      1.調用operator new函數申請空間

      2.在申請的空間上執行構造函數,完成對象的構造

      delete的原理

      1.在空間上執行析構函數,完成對象中資源的清理工作

      2.調用operator delete函數釋放對象的空間

      3 C語(yǔ)言和C++內存管理區別

      malloc/free和new/delete的共同點(diǎn)是:都是從堆上申請空間,并且需要用戶(hù)手動(dòng)釋放。不同的地方是:

      1.malloc和free是函數,new和delete是操作符

      2.malloc申請的空間不會(huì )初始化,new可以初始化

      3.malloc申請空間時(shí),需要手動(dòng)計算空間大小并傳遞,new只需在其后跟上空間的類(lèi)型即可

      4.malloc的返回值為void*, 在使用時(shí)必須強轉,new不需要,因為new后跟的是空間的類(lèi)型

      5.malloc申請空間失敗時(shí),返回的是NULL,因此使用時(shí)必須判空,new不需要,但是new需要捕獲異常

      6.申請自定義類(lèi)型對象時(shí),malloc/free只會(huì )開(kāi)辟空間,不會(huì )調用構造函數與析構函數,而new在申請空間后會(huì )調用構造函數完成對象的初始化,delete在釋放空間前會(huì )調用析構函數完成空間中資源的清理

      4 內存泄漏

      什么是內存泄漏:

      內存泄漏指因為疏忽或錯誤造成程序未能釋放已經(jīng)不再使用的內存的情況。內存泄漏并不是指內存在物理上的消失,而是應用程序分配某段內存后,因為設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。

      內存泄漏的危害:長(cháng)期運行的程序出現內存泄漏,影響很大,如操作系統、后臺服務(wù)等等,出現內存泄漏會(huì )導致響應越來(lái)越慢,最終卡死。

      堆內存泄漏(Heap leak)

      堆內存指的是程序執行中依據須要分配通過(guò)malloc / calloc / realloc / new等從堆中分配的一塊內存,用完后必須通過(guò)調用相應的 free或者delete 刪掉。假設程序的設計錯誤導致這部分內存沒(méi)有被釋放,那么以后這部分空間將無(wú)法再被使用,就會(huì )產(chǎn)生Heap Leak。

      系統資源泄漏

      指程序使用系統分配的資源,比方套接字、文件描述符、管道等沒(méi)有使用對應的函數釋放掉,導致系統資源的浪費,嚴重可導致系統效能減少,系統執行不穩定。

      免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

      欧美最猛性XXXX| 亚洲AV综合色一区二区三区| 欧美多人片高潮野外做片黑人| 亚洲AV成人无码一区在线观看| 亚洲午夜久久久久久噜噜噜| 人妻在厨房被色诱 中文字幕|