NDK—动态内存分配

经过上一节的学习我们对C语言的指针有了一定的认识,接下来让我们来学习一下动态内存分配的知识吧!

正文


当你写这样的一行代码的时候就会发生stack overflow栈溢出,这样我发现来看一下 C语言内存

  1、栈区
  2、堆区
  3、全局区或静态区
  4、字符常量区
  5、程序代码区

对于栈区,栈内存分配了2M,当你设置的超出了2M就会发生栈溢出
对于堆区,在这里需要程序员自己去手动释放掉,堆区占系统的80%
接下来我们了解一下内存的分配:

  • 静态内存分配:分配的内存大小是固定,这样会很容易超出栈内存的最大值,为了防止内存不够用会开更多的内存造成了浪费
  • 动态内存分配:在程序运行过程中,动态指的使用内存的大小,在不用的时候还可以手动的进行释放。

不断的去调用这两个方法就会发现开辟栈内存的方法执行完就会自动释放,而堆内存则不会。
更多的情况是当原来开辟的空间不足的时候进行扩容,这里也分为两种情况,扩大和缩小
缩小:缩小的情况只是将那一部分的数据丢失。
扩大:

  • 如果当前内存段后面有需要的内存空间,那就直接扩展这段内存空间,那么realloc返回的是原先的地址。
  • 如果当前内存段后面的内存空间不足时,那么久使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置并将原先的内存释放掉并返回新的内存地址。
  • 如果申请失败,返回NULL,原来的指针仍然有效。

这里我们需要注意几点

  • 不能多次进行释放操作
  • 释放完之后,我们需要给指针置为NULL,标志着释放完成
  • 内存泄漏,重新复制之后,在free并没有真正得释放内存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (JG-2014-08-20)(前半部分经过网上多篇文章对比整理)(后半部分根据ExceptionalCpp、C+...
    JasonGao阅读 5,749评论 2 23
  • C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...
    一生信仰阅读 1,317评论 0 2
  • 11.看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什...
    AlanGe阅读 847评论 1 4
  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    光剑书架上的书阅读 2,785评论 2 26
  • 读《老猫茶馆9月1日》等有感 一、像貔貅一样先说一个发现,在阅读猫说的过程中,多次出现过一个词:貔貅。得知云币网以...
    花生无翼阅读 420评论 0 6

友情链接更多精彩内容