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

建工网官方网站标准网站建设哪家便宜

建工网官方网站,标准网站建设哪家便宜,江苏有哪些网站建设的公司,做网站要和企业logo内存管理 一、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.ho-use.cn/article/10819813.html

相关文章:

  • 微网站如何建立的地下城钓鱼网站怎么做
  • 可以做翻译兼职的网站有哪些wordpress服务器要求
  • 重庆秀山网站建设价格google chrome官网
  • 怎么建设网站最便宜公司网站简介怎么做
  • 山西推广型网站制作风铃网做微网站要钱吗
  • 动漫网站怎么做的郴州seo公司
  • 安徽外贸网站google建站网站建设论文3000字范文
  • 怎么建立图片的网站吗wordpress 插件 块
  • 网站建设维护费最新军事新闻热点事件
  • 创建一个网站需要什么wordpress小绿锁
  • 简述建设一个网站的具体步骤6桂林生活网二手房市场
  • 惠州网站建设教程自己做网站服务器多少钱
  • 网站开发中什么是站点青岛做网站eoe
  • 票务网站开发什么是门户类型的网站
  • 做视频素材网站网站结构是体现的
  • c2c网站特点wordpress建影视网站
  • 受欢迎的网站建设教程腾讯云lamp wordpress
  • 常州哪里做网站重庆响应式网站设计
  • 做网站还是做微信公众号厂房建设公司哪家好
  • 玉溪网站开发手机网站页面尺寸大小
  • 东莞浩智网站建设哪家好南宁在百度上建网站
  • 上海网站制作的模板网站设计报价
  • 网站空间ip需不需要备案汕头市专注网站建设
  • 合肥建站中小企业网络营销案例
  • 做外贸网站市场网页设计html代码大全python
  • 新建设电影院 网站锕锕锕锕锕锕锕好湿免费网址
  • 做网站素材在哪里找网站开发安卓开发
  • 网站语言版本质感设计网站
  • 怎么在网站做直播间电商网站建设策划
  • 某网站网站的设计与实现网站站点不安全