发布网友 发布时间:2022-04-29 11:33
共4个回答
热心网友 时间:2022-06-27 00:18
释放空间是指用“动态申请内存函数”申请成功的空间,不是你写的代码占用的空间。你写的代码的可执行文件占用的空间要等程序完全退出后才能自动释放,动态申请的空间在使用完毕后可以用对应的“释放函数”释放,以防止所谓“内存泄漏”——就是把内存空间用完了,程序无法运行下去了。如果只申请不释放,积累多了就会产生内存泄漏问题;在空间申请得较少的情况下也不至于一定产生泄漏,等程序退出时也就自动释放了。但写合格的程序是不能有这种指望的,正确的做法是“申请——成功后使用——使用完后及时释放。热心网友 时间:2022-06-27 00:18
一个进程中使用的内存可以简单的分成两种:静态内存、动态内存
#include <stdlib.h>看上面这个例子
a和b就属于静态内存,只要程序一直在运行 一直存在这两个变量占据的内存就不会被释放,int a占据了4字节的内存 char *b也占据了4字节的内存。一旦程序结束,内存就会被释放给其他进程使用。
但是通过malloc申请的内存就是动态内存了,申请了16字节的内存,通过判断malloc函数的返回值可以知道申请是否成功,这块申请出来的内存如果不调用free函数,那这16个字节的内存是不会释放的,直到调用了free或者进程结束,这块内存就被释放了,这个程序将不再使用这块内存,而这块内存已经可以被其他程序使用了。
要注意的是无论是静态还是动态内存,在malloc之后一定要memset或者初始化,因为系统只负责给你分配一块内存,但并不代表这块内存中是没有值的。也就是问题中所提到的:释放内存并不是把内存的数据清零。
你通过free函数释放了内存,比如b指针指向的16字节内存如果里面填满了16字节的值,你在free后另一个进程使用了这块16字节的内存,而他只使用了前5个字节,而他又没有memset初始化,那后15个字节就会有脏数据残留了。
热心网友 时间:2022-06-27 00:19
你写的程序在运行结束后就不会再占用内存了热心网友 时间:2022-06-27 00:19
根据你所描述的问题,推荐你一个网址,讲述了C语言内存分配与释放,希望可以帮到你。
网址:网页链接