关闭

《c语言从入门到精通》看书笔记——第15章 存储管理

标签: c语言内存的组织方式堆和栈内存丢失
207人阅读 评论(0) 收藏 举报
分类:
1、内存的组织方式
     程序被组织成以下4个逻辑段
     (1)可执行代码
     (2)静态数据。可执行代码和静态数据存储在固定的内存位置
     (3)动态数据(堆)。程序请求动态分配的内存来自内存池,也就是上面所列举的堆。
     (4)栈。局部数据对象、函数的参数以及调用函数和被调用函数的联系放在成为栈的内存池中。
          堆和栈可以是被所有同时运行的程序共享的操作系统资源,也可以是使用程序独占的局部资源。
2、堆和栈
     (1)堆
          在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,通常也称之为堆。
          在C程序中,是用malloc和free函数来从堆中动态地分配和释放内存。
     (2)栈
          当程序调用函数和声明局部变量时,系统将自动的分配内存。
          栈是一个后进先出的压入弹出式的数据结构
94动态管理
     (1)malloc函数
          void *malloc(unsigned int size);
          在stdlib.h头文件中包含该函数,作用是在内存中动态的分配一块size大小的内存空间。malloc函数会返回一个指针,该指针指向分配的内存空间,如果出现错误,则返回NULL。
     注意:使用malloc函数分配的内存空间是在堆中,,而不是在栈中。因此在使用完这块内存后一定要将其释放掉,释放内存空间使用的是free函数。
     (2)calloc函数
          void *calloc(unsigned n,unsigned size);
          使用该函数也要包含stdlib.h头文件,其功能是在内存中动态的分配n个长度为size的连续内存空间数组。calloc函数会返回一个指针,该指针指向动态分配的连续内存空间地址。当分配空间错误时,返回NULL。
     (3)realloc函数
          void *realloc(void *ptr,size_t size);
          使用该函数要包含头文件stdlib.h,其功能是改变ptr指针指向的空间大小为size大小。返回值是一个指向新地址的指针,如果出现错误,则返回NULL。
     (4)free函数
          void free(void *ptr);
          free函数的功能是使用由指针ptr指向的内存区,使部分内存区能被其他变量使用。ptr是最近一次调用calloc或malloc函数时返回的值。free无返回值。
3、内存丢失
     在使用malloc等函数分配内存后,要对其使用free函数进行释放。因为内存不进行释放会造成内存遗漏,从而可能会导致系统崩溃。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12803次
    • 积分:352
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类