
1.了解一些基本的内存段图演示验证栈是向下生长的1234567891011121314#includeiostreamusingnamespacestd;intmain(){inta 3;intb 4;intc 5;intd 6;cout a: a endl;cout b:b endl;cout c:c endl;cout d:d endl;return0;}验证堆一般是向上生长的不一定12345678910111213141516#includeiostreamusingnamespacestd;intmain(){intnum 10;while(num--){int*p1 (int*)malloc(sizeof(int));int*p2 (int*)malloc(sizeof(int));cout p1 p1 endl;cout p2p2 endl;cout endl;free(p1);}return0;}一般情况下p1的地址是比p2的地址高的因为堆一般是向上生长的但是有时候是不一定的。巩固内存管理知识点答案温馨提示题目中的指针是局部指针变量是在栈上的但是它指向的内容解引用可能是堆区或者常量区的。可以画画图理解理解2.c申请动态内存的新玩儿法new,delete回顾c语言动态内存管理的方式malloc和calloc和reallocmalloc堆上动态开空间calloc堆上动态开空间初始化成0等价于mallocmemsetrealloc指针已有的空间扩容原题增容–后面又足够的空间异地增容–后面没有足够的空间开辟内置类型的空间1234567891011121314151617181920212223//C开辟动态内存的新玩法//语法演示#includeiostreamusingnamespacestd;intmain(){//申请一个int的动态空间int* p1 (int*)malloc(sizeof(int));*p1 1;int* p2 newint(2);//这里是初始化free(p1);deletep2;//申请一个10各int的动态数组int*p3 (int*)malloc(sizeof(int)* 10);for(inti 0; i 10; i){p3[i] i 1;}int*p4 newint[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//初始化free(p3);delete[]p4;return0;}跟c语言的版本相比c的版本初始化时显得比较方便而且语法比较简洁。当然了更大的优越性还在后面。开辟自定义类型的空间(请用vs2013以上版本测试代码)12345678910111213141516171819202122232425262728293031323334#includeiostreamusingnamespacestd;structListNode{int_val;ListNode* _next;ListNode* _prev;//构造函数ListNode(intval 0):_val(val), _next(nullptr), _prev(nullptr){coutListNode(int val 0)endl;}~ListNode(){cout ListNode() endl;}};intmain(){//申请一个结点的空间ListNode* pa (ListNode*)malloc(sizeof(ListNode)*4);ListNode* pb newListNode(1);//不用去用sizeof去计算空间大小很方便free(pa);deletepb;//申请4个结点的空间--当然了一般不会这么玩儿我们只是看看效果ListNode* pc (ListNode*)malloc(sizeof(ListNode)* 4);ListNode* pd newListNode[4]{1, 2, 3, 4};free(pc);delete[]pd;return0;} 学过c语言版本的数据结构的小伙伴都知道我们push_back一个结点时需要先实现一个buynewnode的函数创建一个结点并且对其进行初始化。而new这个操作符在创建结点的同时已经帮我们实现了结点的初始化。调用了构造函数而且delete还调用了析构函数。总结一下c中如果是申请内置类型对象或者数组malloc和new没有太大区别如果时自定义类型区别很大new和delete时开空间初始化析构清理释放空间malloc和free仅仅时开空间释放空间建议在c中无论时内置类型还是自定义类型的申请释放尽量使用new和delete。3. 32位平台下可以开辟多大的内存我cpu过来遭罪cpu你不要过来啊上述程序我们开了1.8 G左右的内存加上需要堆上的小内存最后的综合有2 G的空间如何开辟4G的内存将项目属性修改一下改成64位平台即可64位平台有2^34 G的空间虚拟内存在这我们不做细说因为我也不太了解Linux。4.了解operator new和operator deletenew其实是operator new 构造函数delete其实是operator delete构造函数new和delete是用户进行动态内存申请和释放的操作符operator new和operator delete是系统提供的全局函数new在底层调用operator new全局函数来申请空间delete在底层通过operator delete全局函数来释放空间大家可以将operator new和operator delete理解成和malloc和free一样用法的函数。唯一不同的地方是operator new和malloc开辟空间失败的处理方式不一样malloc是返回NULL空指针而operator是抛异常下面代码让大家看看效果不必深究以后会有介绍。