当前位置: 首页 > news >正文

开发软件下载wordpress排序优化

开发软件下载,wordpress排序优化,WordPress主题DUX主题,十大外贸平台内存管理 一、C/C内存分布1、内存空间的介绍2、示例题目3、示例题目图解 二、C语言动态内存管理方式1、代码2、介绍 三、C内存管理方式1、概念2、代码3、代码所代表的意义 四、new和delete操作自定义类型1、代码2、运行结果3、特点 五、operator new与operator delete函数1、概… 内存管理 一、C/C内存分布1、内存空间的介绍2、示例题目3、示例题目图解 二、C语言动态内存管理方式1、代码2、介绍 三、C内存管理方式1、概念2、代码3、代码所代表的意义 四、new和delete操作自定义类型1、代码2、运行结果3、特点 五、operator new与operator delete函数1、概念2、代码3、讲解 六、new和delete的实现原理1、内置类型2、自定义类型1new2delete3new T[N]4delete[] 七、定位new表达式(placement-new)1、作用2、使用格式3、使用场景4、代码 八、malloc/free和new/delete的区别1、相同点2、不同点 九、内存泄漏1、概念2、危害3、内存泄漏的分类1堆内存泄漏(Heap leak)2系统资源泄漏 一、C/C内存分布 1、内存空间的介绍 栈/堆栈存储非静态的局部变量、函数参数、返回值等等栈是向下增长的。内存映射段高效的I/O映射方式用于装载一个共享的动态内存库。用户可以使用系统接口创建共享内存做进程间通信。堆用于程序运行时进行动态内存分配堆是向上增长的。数据段存储全局数据和静态数据。代码段存储可执行的代码、只读常量。 2、示例题目 3、示例题目图解 二、C语言动态内存管理方式 1、代码 int main() {int* p1 (int*)malloc(sizeof(int));free(p1);int* p2 (int*)calloc(4, sizeof(int));int* p3 (int*)realloc(p2, sizeof(int) * 10);free(p3);return 0; }2、介绍 三、C内存管理方式 1、概念 因为C兼容C语言所以C语言的内存管理方式在C中可以继续使用但在C中的一些地方使用C语言的那套方式无法达成使用的目的而且用起来比较麻烦因此C提出了自己的内存管理方式即通过new和delete操作符进行动态内存管理。 2、代码 void Test1() {int* p4 new int;int* p5 new int(5);int* p6 new int[6] {1, 2, 3, 4, 5, 6};delete p4;delete p5;delete[] p6; }3、代码所代表的意义 申请和释放单个元素空间时使用new和delete操作符申请和释放连续的空间时使用new[]和delete[]。注意new和delete要匹配使用即使用new开辟的要使用delete去释放使用new[]开辟的要使用delete[]去释放否则可能会出问题。 四、new和delete操作自定义类型 1、代码 class A { public:A(int a 10):_a(a){cout A(int a 10) this endl;}~A(){cout ~A() this endl;} private:int _a; };int main() {A* p1 (A*)malloc(sizeof(A));A* p2 new A(20);free(p1);delete p2;A* p3 (A*)malloc(sizeof(A) * 10);A* p4 new A[10]{ 20,30,40 };free(p3);delete[] p4;return 0; }2、运行结果 3、特点 对于自定义类型来说在申请自定义类型的空间时new会调用它的构造函数对对象进行初始化而malloc不会在释放自定义类型的空间时delete会调用它的析构函数对对象中的资源进行清理而free不会。对于内置类型来说new/delete跟malloc/free没有本质的区别只有用法的区别即使用new/delete的用法比较简单。总的来说new/delete 是为自定义类型准备的。new开辟空间失败不需要检查返回值因为它开辟空间失败是抛异常malloc开辟空间失败需要检查返回值因为它开辟空间失败是返回空指针。 五、operator new与operator delete函数 1、概念 通过前面的介绍我们知道new和delete是用户进行动态内存申请和释放的操作符。而operator new 和operator delete是系统提供的全局函数new在底层调用operator new全局函数来申请空间delete在底层调用operator delete全局函数来释放空间。 2、代码 void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc) { // try to allocate size bytes void *p; while ((p malloc(size)) 0)if (_callnewh(size) 0){// report no memory// 如果申请内存失败了这里会抛出bad_alloc类型异常static const std::bad_alloc nomem;_RAISE(nomem);} return (p); }void operator delete(void *pUserData) {_CrtMemBlockHeader * pHead;RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));if (pUserData NULL)return;_mlock(_HEAP_LOCK); /* block other threads */__TRY/* get a pointer to memory block header */pHead pHdr(pUserData);/* verify block type */_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead-nBlockUse));_free_dbg( pUserData, pHead-nBlockUse );__FINALLY_munlock(_HEAP_LOCK); /* release other threads */__END_TRY_FINALLYreturn; }//free的实现 #define free(p) _free_dbg(p, _NORMAL_BLOCK)3、讲解 operator new函数实际是通过malloc来申请空间的当malloc申请空间成功时直接返回指向申请出来的空间的指针当申请空间失败时尝试执行空间不足的应对措施如果用户设置了该应对措施则继续申请空间否则就抛异常。operator delete函数最终是通过free来进行释放空间的操作如上方的代码中operator delete函数中有_free_dbg语句而该语句在free中被重命名为free( p )。 六、new和delete的实现原理 1、内置类型 当申请的空间是内置类型的空间时new和mallocdelete和free基本类似不同的地方是new和delete申请和释放的是单个元素的空间new[]和delete[]申请和释放的是连续空间并且new在申请空间失败时会抛异常malloc会返回NULL。 2、自定义类型 1new 调用operator new函数申请空间。在申请的空间上调用该自定义类型的构造函数执行初始化操作完成对对象的构造。 2delete 在空间上调用该自定义类型的析构函数完成对对象中资源的清理工作。调用operator delete函数释放对象的空间。 3new T[N] 调用operator new[]函数在operator new[]中实际调用operator new函数完成N个对象空间的申请。在申请的空间上调用N次该自定义类型的构造函数执行对N个对象的初始化操作。 4delete[] 在欲释放的对象空间上调用N次该自定义类型的析构函数完成对N个对象中的资源清理工作。调用operator delete[]释放空间在operator delete[]中实际是调用operator delete去释放空间。 七、定位new表达式(placement-new) 1、作用 定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。 2、使用格式 new (place_address) type或者new (place_address) type(initializer-list)。place_address必须是一个指针initializer-list是类型的初始化列表。 3、使用场景 定位new表达式在实际中一般是配合内存池使用。因为内存池分配出来的内存空间没有进行初始化的操作所以如果是自定义类型的对象需要使用定位new表达式显式调用该自定义类型的构造函数进行初始化。 4、代码 //自定义的类 class A { public:A(int a 10):_a(a){cout A(int a 10) this endl;}~A(){cout ~A() this endl;} private:int _a; };int main() {A* p1 (A*)malloc(sizeof(A));new(p1)A;p1-~A();free(p1);A* p2 (A*)operator new (sizeof(A));new(p2)A(20);p2-~A();operator delete(p2);return 0; }八、malloc/free和new/delete的区别 1、相同点 都是从堆上申请空间并且需要用户对这些申请出来的空间手动进行释放。 2、不同点 malloc和free是函数new和delete是操作符。当申请的是自定义类型的空间时malloc不会对它进行初始化而new可以调用它的构造函数对它进行初始化。malloc申请空间时需要手动计算欲申请空间的大小并作为实参进行传递而new只需在其后跟上空间的类型即可如果是多个对象[]中需指定欲申请的对象数量。malloc的返回值为void*, 在使用时必须进行强制类型转换而new不需要因为new后面跟着空间的类型而编译器会自动进行那些操作。malloc申请空间失败时返回的是NULL因此使用时必须进行判空判断申请空间是否成功而new不需要但是new需要捕获异常因为它申请空间失败时是抛异常。申请自定义类型对象时malloc与free只会开辟空间不会调用该自定义类型的构造函数与析构函数而new在申请空间后会调用该自定义类型的构造函数完成对对象的初始化delete在释放空间前会调用该自定义类型的析构函数完成对对象空间中的资源清理工作。 九、内存泄漏 1、概念 内存泄漏是指因为疏忽或错误的原因而造成程序未能释放已经不再使用的内存空间的情况。内存泄漏并不是指内存在物理空间上的消失而是应用程序分配完某段内存后因为设计错误失去了对该段内存的控制因而造成了内存空间的浪费。 2、危害 长期运行的程序如果出现内存泄漏会造成很大的影响如操作系统、后台服务等等出现内存泄漏会导致响应越来越慢最终卡死。 3、内存泄漏的分类 1堆内存泄漏(Heap leak) 正常的程序在执行中依据通过malloc/calloc/realloc/new等从堆中分配一块内存空间当使用完这块空间后必须通过调用相应的free或者delete对这块空间进行释放。但如果程序设计错误等原因导致这部分内存空间没有被释放那么以后这部分空间将无法再被使用就会产生Heap Leak。 2系统资源泄漏 程序使用系统分配的资源比方套接字、文件描述符、管道等没有使用对应的函数去释放掉导致系统资源的浪费严重可导致系统效能减少系统执行不稳定。 本文到这里就结束了如有错误或者不清楚的地方欢迎评论或者私信 创作不易如果觉得博主写得不错请务必点赞、收藏加关注
http://www.hkea.cn/news/14325524/

相关文章:

  • 长沙门户网站有哪些域名管理
  • 怎么促成客户做网站杂志排版设计用什么软件
  • 网站建设 推广信息263邮箱个人登录
  • 怎么建一个卖东西的网站有免费可以做的网站吗
  • 如何在宝塔中安装wordpress岳阳seo优化
  • 哪家公司做网站正规网站建公司简介
  • 三门峡网站建设电话在线妇科免费咨询
  • 有口碑的宁波网站建设wordpress菜单导航图标图片大全
  • 网站建设发布实训总结app开发公司查询
  • 有站点网络营销平台自己做网站卖什么名字
  • 网站空间500m是什么意思wordpress 悬浮网易云
  • 免费论文网站大全做网站的版式会侵权吗
  • 常德建设局网站wordpress溢价主题
  • 设置网站默认编码网站服务器指的是什么
  • dedecms网站别名解析上海建筑工程有限公司
  • 合肥网站优化方案网站备案登陆用户名是什么
  • 域名对网站的好处资源优化网站排名
  • 企业网站源码打包网站原型图软件
  • 如何利用网站模板wordpress微信缩略图
  • 有没有人一起做网站如何用手机网站做淘宝客
  • 松江网站设计李光辉:营销型企业网站建设的指导思想是什么?
  • app应用网站单页模板集团网站建设哪个好
  • 泉州野外拓展网站建设网站alt标签
  • 广州建站业务公司物流运输网
  • 用dw做网站怎么换行禹州做网站的公司
  • asp网站无法上传图片高明区住房和城乡建设局网站
  • 东莞技术好的网站建设成都科技网站建设咨询
  • 宜兴建设局质监网站wordpress自定义字段火车头
  • 服务器 无法访问网站网站备案流程阿里云
  • Wix网站开发 工作室西安建设网站公司