c语言存储管理初谈

本文介绍了C语言中的存储管理,包括内存的逻辑段划分、堆与栈的区别以及动态内存管理函数malloc、calloc、realloc和free的使用。强调了动态内存分配后及时释放的重要性,避免内存丢失导致系统性能下降甚至崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##存储管理##

1.内存组织方式
    开发人员将程序编写完成之后,程序要先装载到i计算机的内核或者半导体内存中,再运行程序。程序被组织成4个逻辑段:a.可执行代码,b.静态数据(可执行代码和静态数据存储在固定的内存位置),c.动态数据(堆),d.栈(局部数据对象、函数的参数以及调用函数的联系放在称为桟的内存池中)。

2.堆与桟
通过内存组织方式,堆用来存放动态分配内存空间,而桟用来存放局部数据对象、函数的参数以及调用函数和被调用函数的联系。
    #堆
在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,即堆。c中,是用malloc函数和free函数来从堆中动态地分配和释放内存。
    #桟
桟是一个后进先出的压入弹出式的数据结构。在程序运行时,需要每次向桟中压入一个对象,然后桟指针向下移动一个位置。当系统从桟中弹出一个对象时,最晚进桟的对象将被弹出,然后桟指针向上移动一个位置。如果桟指针位于桟顶,则表示桟是空的;如果桟指针指向最下面的数据项的后一个位置,则表示桟为满的。

3.动态管理
    a.malloc函数
在stdilb.h头文件中包含该函数,作用是在内存中动态地分配一块size大小的内存空间。malloc函数会返回一个指针,该指针指向分配的内存空间,如果出现错误则返回NULL。
    函数原型:
        void *malloc(unsigned int size);
注意:使用malloc函数分配的内存空间是在堆中,而不是在栈中。因此在使用完这块i内存之后一定要将其释放掉,释放内存空间使用的是free函数。
    b.colloc函数
在stdlib.h头文件中包含该函数,函数的功能书在内存中动态分配n个长度为size的连续内存空间数组。calloc函数会返回一个指针,该指针指向动态分配的连续内存空间地址。当分配空间错误时,返回NULL。
    函数原型:
        void *calloc (unsigned n,unsigned size);
第一个参数表示分配数组中元素的个数,而第二个参数表示元素的类型。eg:pArray=(int*)calloc(3,sizeof(int));
    c.realloc函数
包含在头文件stdlib.h,其功能书改变ptr指针指向的空间大小为size大小。设定的size大小可以是任意的。返回值是一个指向新地址的指针,如果出现错误则返回NULL。
    函数原型:
        void *realloc (void *ptr,size_tsize);
eg:fDouble=(double*)malloc(sizeof(double));
   ilnt=realloc(fDouble,sizeof(int));
    d.free函数
该函数的功能是使用由指针ptr指向的内存区,使部分内存区内被其他变量使用。ptr是最近一次调用calloc或malloc函数时返回的值,free函数无返回值。
    函数原型:
        void free(void *ptr);
4.内存丢失
    在使用malloc等函数分配内存后,要对其使用free函数进行释放。因为内存不进行释放会造成内存遗漏,从而可能会导致系统崩溃。free函数的用处在于实时地执行回收内存的操作。一般当程序结束后,操作系统会将完成释放的功能,但建议实时回收内存,防止过度占用系统内存,影响系统的性能,导致系统因此可能崩溃。若开辟的虚拟空间因为指针的所指的地址丢失,从而无法正常free该虚拟空间,则称为内存丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值