|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 青云风力 于 2016-10-22 20:16 编辑
这是我在鱼C 第三次发帖了。前面两篇都是我C++学习的线路和建议。大家可以到我的空间找一下。我的水平还没有达到能够结构化的介绍内存管理的知识,所以题目的标号,只是发帖的顺序。
接下来就进入正题了,如果你的有一点水平,应该就听说过内存泄露是怎么回事,而不只是仅限于听说过。这里简单的介绍下内存泄露。加入我们使用 int* p = new int[10];来申请到了10个int的空间(实际上不是10个int,这下面会说)。但是经过了一些代码,使用者释放的时候却是这么做的: delete p; 大部分人都知道这么做是错的,会造成内存泄露。实际上应该是 delete[] p; 。这篇帖子会简单的介绍内存泄露究竟是怎么回事。
解决问题的第一步是我们使用 int *p = new int[10];究竟申请到了多少内存?如果没有刻意地去了解这方面的知识的人,就会觉得申请到了10个int,但事实不是如此。 我在linux下不方便画图,但是我会用最简洁的语言去描述,读者可以那一支笔一张纸画画结构图。首先,除了我们申请的10个int之外,操作系统会在这10个int的上下各加上两个4字节的cookie,这两个cookie的作用简单的理解就是记录这两个cookie中间夹的内存空间的信息。好,这下我们算一下,数据类型的大小ISO没有定下标准,但绝大多数情况,int是4个字节的大小。10*4+2*4=48 ,在10个int的上方,上cookie下方会有一个4个字节的大小的空间,用来记录究竟使用者究竟申请了多少内存,现在这种情况下记录的是10,这下我们知道了,我们实际上得到的是52个字节的大小。
|
|