08内存管理

C语言的内存分两种:静态内存,动态内存

静态内存

静态内存包括 栈区,数据区,代码区

[特点]

​ (1)静态内存,由系统进行分配 who

​ (2)静态内存的大小在程序运行之前就可以确定 when

​ (3)静态内存是在 栈区,数据区,代码区 进行分配的 where

​ (4)静态内存,由系统进行释放 who

动态内存

动态内存,堆区

[特点]

​ (1)动态内存,由程序员手动写代码进行分配 who

​ (2)动态内存,内存大小/内存分配动作,必须在程序运行时才能确定 when

​ (3)动态内存,是在 堆区 进行分配的 where

​ (4)动态内存,由程序员手动写代码进行释放 who

堆内存分配 memory alloc

void *malloc(size_t);
//malloc的参数,表示所要分配的堆内存的大小(以字节为单位)
//malloc的返回值,返回的是成功分配的内存的首地址

​ [注] 因为,返回的这个地址可能是任意大小内存的首地址,所以返回值类型为一个泛型指针类型

堆内存释放 free

void free(void *);
//传入所要释放堆内存的首地址,释放对应的堆内存
//同一个堆内存,不能多次释放,多次释放会导致程序崩溃
//堆内存不进行释放,会导致内存泄露
//对于一个长时间运行的应用程序来说,内存泄露会导致系统的[可用内存]变少,应用反应迟钝,卡 

//对于一个短时间运行的应用程序来说,内存泄露可以忽略.因为程序结束时,未及时释放的堆内存,也会被系统释放

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 内存管理的目的 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。简单粗...
    晨光光阅读 5,074评论 1 4
  • 11.看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什...
    AlanGe阅读 4,082评论 1 4
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,052评论 1 16
  • 操作系统对内存的管理 没有内存抽象的年代 在早些的操作系统中,并没有引入内存抽象的概念。程序直接访问和操作的都是物...
    Mr槑阅读 16,844评论 3 24
  • 清晨的旭日与夜晚的月亮 都如此耀眼 不过是时间的距离 春天的桃花和秋天的金桂 都同样的妩媚香甜 百媚千娇是...
    小采瑛阅读 1,514评论 0 0