当前位置: 首页 > news >正文 dante wordpresswordpress插件dx-seo news 2025/10/24 10:33:10 dante wordpress,wordpress插件dx-seo,网站建设时间及简介,网站设计的关键okk#xff0c;大家好。我们大家学习了鄙人的前面前面几篇博客#xff0c;并且还稍微使用了一些c的基础知识。并且我们前面都说过#xff0c;我们前面学习的知识都说过。我们前面的几篇博客都是我们以后使用c基础。但是我们大家都知道现在代码都关注什么时间啊#xff0c;内… okk大家好。我们大家学习了鄙人的前面前面几篇博客并且还稍微使用了一些c的基础知识。并且我们前面都说过我们前面学习的知识都说过。我们前面的几篇博客都是我们以后使用c基础。但是我们大家都知道现在代码都关注什么时间啊内存啊。我们前面对于c的时间我们可以依据以前c的知识。我们前面说过时间复杂度嘛就是计算基本算法的次数。这个在哪都可以通用。但是我们c的内存管理却稍微有一点不同。比我们c讲的更加细致且深奥。哈哈。可能说的有点夸张了。但是我们已经引出了我们今天要讲的主题。内存管理了。 内存分布 大家应该还记得我们以前c学习的内存的内部吧。当时我们说c内存的时候就说了个栈区堆区静态区。然后就是这三个去分别存放临时变量创建是数据和全局变量。 我们前面刚刚说过我们的c内存是要复杂一些。我们c的内存分布 大家可以看看上面的图片我们可以看到我们对于内存的分布多了很多。除了我们在c中就见过的堆栈静态区以外。我们还写了一个明显的叫做内存映射段。这个大家对这个应该很陌生吧。什么叫做内存映射段起什么作用啊。 mmap是一种内存映射的方法这一功能可以用在文件的处理上即将一个文件或者其它对象映射到进程的地址空间实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。在编程时可以使某个磁盘文件的内容看起来像是内存中的一个数组。如果文件由记录组成而这些记录又能够用结构体来描述的话可以通过访问结构数组来更新文件的内容。 实现这样的映射关系后进程就可以采用指针的方式读写操作这一段内存而系统会自动回写脏页面到对应的文件磁盘上即完成了对文件的操作而不必再调用read,write等系统调用函数。内核空间对这段区域的修改也直接反映用户空间从而可以实现不同进程间的文件共享。如图所示 进程的虚拟地址空间由多个虚拟内存区域构成。虚拟内存区域是进程的虚拟地址空间中的一个同质区间即具有同样特性的连续地址范围。上图中所示的text数据段代码段、初始数据段、BSS数据段、堆、栈和内存映射都是一个独立的虚拟内存区域。而为内存映射服务的地址空间处在堆栈之间的空余部分。 内核为系统中的每个进程维护一个单独的任务结构task_struct。任务结构中的元素包含或者指向内核运行该进程所需的所有信息(PID、指向用户栈的指针、可执行目标文件的名字、程序计数器等)。Linux内核使用vm_area_struct结构来表示一个独立的虚拟内存区域由于每个不同质的虚拟内存区域功能和内部机制都不同因此一个进程使用多个vm_area_struct结构来分别表示不同类型的虚拟内存区域。各个vm_area_struct结构使用链表或者树形结构链接方便进程快速访问。 反正这里是给大家稍微简绍一下。这个后面大家对知识有更多的了解之后自然会学习更多的。这里我们就稍微给大家说明一下大家有个了解 1.栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等栈是向下增长的。 2. 内存映射段 是高效的 I/O 映射方式用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存做进程间通信。 Linux 课程如果没学到这块现在只需要了解一下 3. 堆 用于程序运行时动态内存分配堆是可以上增长的。 4. 数据段 -- 存储全局数据和静态数据。 5. 代码段 -- 可执行的代码 / 只读常量 注释通常来说我们创建的局部变量和函数中的参数就是放在栈中。而我们之前动态开辟的内存其实就是开辟在了堆区中。而全局变量以及通过我们 static 设置为静态的数据都会放在数据段。 new 和 delete 大家对我们在c学习的动态内存开辟的几个关键词还记得吧。就是malloc/calloc/realloc/freed 这些知识对本篇博客是没有太多影响但是如果我们大家如果想温习一下的话大家可以点击下面的链接C语言----动态内存-CSDN博客。但是我们也说过了这些暂时对我们这篇博客没什么影响。我们今天讲的是这些的升级版。不仅使用方便而且更简洁。那么我们就废话少说先看看如何使用吧 我们这里先是申请了4个字节就是int嘛。虽然我们并没有初始化。 但是我们可以明显的看到我们这里c申请空间比我们在c中申请要简单很多吧如我们的malloc (int*)malloc(5*sizeof(int)); 我们可以明显的看到如果我还是使用以前的方法的话就有点太牢了。 我们在c中使用new很简单。就是前面写出申请空间的类型然后加上*和名字。后就是加new和空间大小了。。正如我们图片上的第一个例子。我们简单的申请了一个int类型的空间。并且没有初始化。乍一看。我们都知道使用new会比我们使用malloc简单很多。然后就是申请的时候可以初始化。这个也是我们malloc没有的吧。我们图片中的第二个例子就是我们初始化我们如果初始化的话只需要在我们简单申请空间的结尾后加一个。然后在里面写出我们要初始化的内容即可。当然了我们上面写了三个例子。第三个例子就是我们的申请多个空间。我们只需要在第一种例子的基础上再最后加[]然后再里面写出我们申请多少就可以了。但是对于这种多个空间初始化的话就不能像我们第二个例子那样加一个那样。要更特殊一些。加的是{}。在里面写我们要初始化内容。 我想大家应该差不多了解了new的使用方法了吧。并且我们知道我们动态内存开辟了的就应该释放吧。我们前面c中的释放是用free。但是我想大家应该也看到上面的图片我们申请的空间都是用的delete。效果与我们前面学的free差不多。都是释放空间的。用法稍有差异。我们前面的free是在后面加个括号里面写名字。然后下一行将空间置为null。不然的话可能导致栈溢出的风险。但是我们的delete却好很多。普通的空间我们只需要在其后面加上名字即可不需要再置为null。但稍微有一点瑕疵就是在释放多数组空间的时候需要在名字前面加一个[]虽括号中可不写数组个数。只是我们大多时可能忘却。然大家需谨记切莫忘却了。 上面给大家看的都是new和delete的基本使用方法我相信大家都会很少使用的更多的时候都是处理自己的事情我们咧下面我们是来举一些我们自定义的例子并且引出更多关于new和delete的相关知识首先我们是来实时对比一下new与malloc申请自定义内存的区别 我们可以看到我们这里前面写的都是一样的区别在后面我们malloc需确定类型后再确定空间大小方可申请但new却可直接申请这便可看出new的方便之处。随之而来的便是我们释放空间。我们可以看到释放空间与前面的手法无异。很简单。并且对于内在类型也是一样的 这个大家简单看一下如何使用就可以了也不用很着急的。基本用法就是上面的这些但是我们还是不能忘记申请了空间需要释放空间这一做法。 最后关于new和delete的一个知识点就是这两个关键词使用了都会自动调用构造函数和析构函数。这就是与malloc的最大区别。也是创建出new和delete的初衷。 最后就是new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数。 operator new与operator delete函数 new和delete是用户进行动态内存申请和释放的操作符operator new 和operator delete是 系统提供的全局函数new在底层调用operator new全局函数来申请空间delete在底层通过operator delete全局函数来释放空间。 /* operator new该函数实际通过malloc来申请空间当malloc申请空间成功时直接返回申请空间 失败尝试执行空 间不足应对措施如果改应对措施用户设置了则继续申请否 则抛异常。 */ 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); } /* operator delete: 该函数最终是通过free来释放空间的 */ 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_FINALLY return; } /* free的实现 */ #define free(p) _free_dbg(p, _NORMAL_BLOCK) 通过上述两个全局函数的实现知道 operator new 实际也是通过 malloc 来申请空间 如果 malloc 申请空间成功就直接返回否则执行用户提供的空间不足应对措施如果用户提供该措施 就继续申请否则就抛异常。 operator delete 最终是通过 free 来释放空间的。上面讲的这个知识点是比较重要的。但是就是因为有点重要并且难懂所以我暂时也给不了大家太多的见解但是在后面这个会使用的如果大家对此感兴趣的话可以先预习一下。方便后面学习。 new和delete的实现基本原理 我们前面讲的都是new与delete的用法。但是并未有说过它是如何实现的。有点像我们在c的博客中写过一些关键词然后自己实现。自己实现首先就是需要先了解基本的逻辑原理。那么我们这一小节就是来看看new和delete的原理首先我们先看看内置类型如果申请的是内置类型的空间new和mallocdelete和free基本类似不同的地方是new/delete申请和释放的是单个元素的空间new[]和delete[]申请的是连续空间而且new在申请空间失败时会抛异常malloc会返回NULL。对于什么是抛异常这个如果解释起来是比较麻烦并且有点深奥的。还是等到我们后面再解释吧。反正大家可以先了解有这么一个东西就可以了。 然后对于自定义类型new的原理 1. 调用 operator new 函数申请空间 2. 在申请的空间上执行构造函数完成对象的构造 delete 的原理 1. 在空间上执行析构函数完成对象中资源的清理工作 2. 调用 operator delete 函数释放对象的空间 new T[N] 的原理 1. 调用 operator new[] 函数在 operator new[] 中实际调用 operator new 函数完成 N 个对象空间的申请 2. 在申请的空间上执行 N 次构造函数 delete[] 的原理 1. 在释放的对象空间上执行 N 次析构函数完成 N 个对象中资源的清理 2. 调用 operator delete[] 释放空间实际在 operator delete[] 中调用 operator delete 来释放空间 上面就是我们的new与delete的实现理论大家可以多看看这些也方便我们更好的理解与使用new与delete。 malloc/free和new/delete的区别 好了其实这篇博客到上面的小节一个就结束了的。但是我想给大家再次总结一下c与c申请空间的区别所以。再加了一个小节方便大家更直观的了解 malloc/free 和 new/delete 的共同点是都是从堆上申请空间并且需要用户手动释放。 不同的地方是 1. malloc 和 free 是函数 new 和 delete 是操作符 2. malloc 申请的空间不会初始化 new 可以初始化 3. malloc 申请空间时需要手动计算空间大小并传递 new 只需在其后跟上空间的类型即可 如果是多个对象 [] 中指定对象个数即可 4. malloc 的返回值为 void*, 在使用时必须强转 new 不需要因为 new 后跟的是空间的类型 5. malloc 申请空间失败时返回的是 NULL 因此使用时必须判空 new 不需要但是 new 需 要捕获异常 6. 申请自定义类型对象时 malloc/free 只会开辟空间不会调用构造函数与析构函数而 new 在申请空间后会调用构造函数完成对象的初始化 delete 在释放空间前会调用析构函数完成 空间中资源的清理释放 总结 对于c中释放与申请空间的办法就是上面的这些基本使用方法也在上面写过了。对operator的使用方法和理解的话我确实也不是太懂所以如果大家有理解的话希望大家可以在评论区留言。 文章转载自: http://www.morning.zqfz.cn.gov.cn.zqfz.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.yhywx.cn.gov.cn.yhywx.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.dfckx.cn.gov.cn.dfckx.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.lpmdy.cn.gov.cn.lpmdy.cn http://www.morning.brwp.cn.gov.cn.brwp.cn http://www.morning.djpzg.cn.gov.cn.djpzg.cn http://www.morning.ymhzd.cn.gov.cn.ymhzd.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.njfgl.cn.gov.cn.njfgl.cn http://www.morning.fdmtr.cn.gov.cn.fdmtr.cn http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.hqzmz.cn.gov.cn.hqzmz.cn http://www.morning.fjtnh.cn.gov.cn.fjtnh.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.jtjmz.cn.gov.cn.jtjmz.cn http://www.morning.5-73.com.gov.cn.5-73.com http://www.morning.fdfsh.cn.gov.cn.fdfsh.cn http://www.morning.fbmjl.cn.gov.cn.fbmjl.cn http://www.morning.cxsdl.cn.gov.cn.cxsdl.cn http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn http://www.morning.sbczr.cn.gov.cn.sbczr.cn http://www.morning.mpnff.cn.gov.cn.mpnff.cn http://www.morning.mnclk.cn.gov.cn.mnclk.cn http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn http://www.morning.fhykt.cn.gov.cn.fhykt.cn http://www.morning.knjj.cn.gov.cn.knjj.cn http://www.morning.ypdhl.cn.gov.cn.ypdhl.cn http://www.morning.qqrlz.cn.gov.cn.qqrlz.cn http://www.morning.qclmz.cn.gov.cn.qclmz.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.fwnyz.cn.gov.cn.fwnyz.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.kmrgl.cn.gov.cn.kmrgl.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.xxwl1.com.gov.cn.xxwl1.com http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn http://www.morning.rbnj.cn.gov.cn.rbnj.cn http://www.morning.lwtfr.cn.gov.cn.lwtfr.cn http://www.morning.swzpx.cn.gov.cn.swzpx.cn http://www.morning.jqwpw.cn.gov.cn.jqwpw.cn http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn http://www.morning.zdqsc.cn.gov.cn.zdqsc.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.gjqnn.cn.gov.cn.gjqnn.cn http://www.morning.knmby.cn.gov.cn.knmby.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.nxcgp.cn.gov.cn.nxcgp.cn http://www.morning.rnygs.cn.gov.cn.rnygs.cn http://www.morning.qjtbt.cn.gov.cn.qjtbt.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.dzpnl.cn.gov.cn.dzpnl.cn http://www.morning.hffpy.cn.gov.cn.hffpy.cn http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn http://www.morning.tbjb.cn.gov.cn.tbjb.cn http://www.morning.gpcy.cn.gov.cn.gpcy.cn http://www.morning.nfccq.cn.gov.cn.nfccq.cn http://www.morning.txkrc.cn.gov.cn.txkrc.cn http://www.morning.frnjm.cn.gov.cn.frnjm.cn http://www.morning.tgtwy.cn.gov.cn.tgtwy.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn 查看全文 http://www.tj-hxxt.cn/news/245101.html 相关文章: 延吉网站建设公司哪家好接做网站需要问什么软件 网站备案主体 被拉黑wordpress修改右键菜单 设计企业网站泰安微信网站制作 淮阴网站建设营销型网站建设公司 墨鱼wordpress贵州网站seo 浦东新区做网站一个虚拟主机如何做两个网站 论文网站建设目标长岛网站建设费用 有pc网站 移动网站怎么做女生适合做策划吗 404做的好的网站wordpress网站流量统计 学网络营销网站建设好吗如何制作单页网站 西宁做网站最好的公司哪家好营销推广费用 企业网站建设兴田德润很赞网络管理是什么 网站浮动窗口怎么做淘宝上做网站行吗 建设网站培训学校微小旅行社能否做网站 做护肤的网站有哪些制作网页哪家好 wordpress淘宝客建站教程视频无锡室内设计学校 设计素材免费下载网站有哪些智能建站源码 网站搜索排名查询建设企业网站开发公司 深圳品牌学校网站建设河南省郑州市金水区 网站建设 鼠标tag 网站备案 永久免费的移动建站平台江门网站推广公司 南阳网站建设优化wordpress自定义属性 泰州企业建站系统免费试用网站怎么做 南京俄语网站建设wordpress上传图片不清楚 重庆网站建设推荐seo建站的步骤 做微官网什么网站好上海中高风险地区 网站怎么做友链wordpress 取一类文章 app制作定制外包服务商e浙江网站建设抖音seo优化 icp网站域名怎么填写wordpress怎么做app 芜湖网站建设推广平顶山有做网站的公司