<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
下面看一段程式碼
int globalVar = 1; static int staticGlobalVar = 1; void Test() { static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(int) * 4); int* ptr2 = (int*)calloc(4, sizeof(int)); int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3); } //globalVar靜態區 staticGlobalVar靜態區 staticVar靜態區 localVar棧區 //num1棧區(是陣列) char2棧區(是陣列,首元素地址) *char2棧區(是首元素),注意:char2並不是常數字串,"abcd"才是,而char2是將"abcd"拷貝了一份,在棧區 //pChar3棧區(是指標) *pChar3常數區(是常數字串) //ptr1棧區(是指標) *ptr1堆區
malloc/calloc/realloc 和 free
new,delete
new/delete和malloc/free 針對內建型別沒有任何差別,只是用法不一樣
// 申請一個10個int的陣列 int* p1 = (int*)malloc(sizeof(int) * 10); int* p2 = new int[10];// new/delete new[]/delete[]一定要匹配,否則可能會出錯 free(p1); delete[] p2;//這裡不要忘了[] // 申請單個int物件 int* p3 = (int*)malloc(sizeof(int)); int* p4 = new int; free(p3); delete p4;
對於自定義型別,new和delete會開闢空間+初始化,解構+釋放空間
malloc/free只開闢空間,釋放空間
struct ListNode { ListNode* _next; ListNode* _prev; int _val; ListNode(int val = 0): _next(nullptr), _prev(nullptr), _val(val) cout << "ListNode(int val = 0)" << endl; } ~ListNode() { cout << "~ListNode()" << endl;} }; int main() { //C malloc只是開空間 free釋放空間 struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode)); free(n1); //C++ new 針對自定義型別,開空間+建構函式初始化 //delete 針對自定義型別,解構函式清理 + 釋放空間 ListNode* n2 = new ListNode(5); // -> 相當於c語言中BuyListNode(5) delete n2; //申請陣列 struct ListNode* arr3 = (struct ListNode*)malloc(sizeof(struct ListNode)*4); free(arr3); ListNode* arr4 = new ListNode[4]{1,2,3,4};//陣列初始化可以用{} delete[] arr4; //那麼,new內建型別的時候也可以進行初始化 //int* p1 = new int(0); //int* p2 = new int[4]{ 1, 2, 3, 4 }; }
new = operator new(庫函數) + 建構函式
operator new = malloc + 失敗拋異常機制
其實operator new和malloc用法是完全一樣的,功能都是在堆上申請釋放空間,只是失敗了處理方式不一樣,malloc失敗返回NULL,operator new失敗以後拋異常
相同點:都是從堆上申請空間,並且需要使用者手動釋放。
區別:
32位元下面,最多2G左右; 在64位元下面申請
1)什麼是記憶體漏失,記憶體漏失的危害?
2)如何避免記憶體漏失
總結一下 : 記憶體漏失非常常見,解決方案分為兩種:
1 、事前預防型。如智慧指標等。
2 、事後查錯型。如洩漏檢測工具。
到此這篇關於C/C++記憶體管理基礎與面試的文章就介紹到這了,更多相關C/C++記憶體管理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45