自己写的程序用到了堆内存,如果没有在结束程序之前释放它,是不是即使程序结束了也还依然处于占用状态直
自己写的程序用到了堆内存,如果没有在结束程序之前释放它,是不是即使程序结束了也还依然处于占用状态直到关机重启?(话说重启应该就行了吧?)那能不能不重启,用那些清理物理内存...
自己写的程序用到了堆内存,如果没有在结束程序之前释放它,是不是即使程序结束了也还依然处于占用状态直到关机重启?(话说重启应该就行了吧?)那能不能不重启,用那些清理物理内存的软件清理一下?有用不?天天new来new去的总感觉在玩火……😂
展开
展开全部
堆内存分配:(典型的函数: malloc)
char* AllocStrFromHeap(int len)
{
char *pstr;
if ( len <= 0 ) return NULL;
return ( char* ) malloc( len );
}
堆内存分配:(典型的函数: malloc)
char* AllocStrFromHeap(int len)
{
char *pstr;
if ( len <= 0 ) return NULL;
return ( char* ) malloc( len );
}
对于第一个函数,那块pstr的内存在 函数返回时就被系统释放了。于是所 返回的char*什么也没有。而对于第二 个函数,是从堆上分配内存,所以哪 怕是程序退出时,也不释放,所以第 二个函数的返回的内存没有问题,可 以被使用。但一定要调用free释放, 不然就是Memory Leak!
对于第一个函数,那块pstr的内存在 函数返回时就被系统释放了。于是所 返回的char*什么也没有。而对于第二 个函数,是从堆上分配内存,所以哪 怕是程序退出时,也不释放,所以第 二个函数的返回的内存没有问题,可 以被使用。但一定要调用free释放, 不然就是Memory Leak!
在堆上分配内存很容易造成内存泄 漏,这是C/C++的最大的“克星”,如果 你的程序要稳定,那么就不要出现 Memory Leak。
刚好前一段时间有一个Linux上的服务 应用程序,大约有几百的C文件编译 而成,运行测试良好,等使用时,时 间一长内存占用率就偏高,搞得许多 人焦头烂额,查不出问题所在。出现 这种问题就是MemeryLeak在做怪 了,在C/C++中这种问题总是会发 生,所以你一定要小心。一个 Rational的检测工作——Purify,可以 帮你测试你的程序有没有内存泄漏。 我保证,做过许多C/C++的工程的程 序员,都会对malloc或是new有些感 冒。当你什么时候在使用malloc和 new时,有一种轻度的紧张和惶恐的 感觉时,你就具备了这方面的修养 了。
在堆上分配内存很容易造成内存泄 漏,这是C/C++的最大的“克星”,如果 你的程序要稳定,那么就不要出现 Memory Leak。
刚好前一段时间有一个Linux上的服务 应用程序,大约有几百的C文件编译 而成,运行测试良好,等使用时,时 间一长内存占用率就偏高,搞得许多 人焦头烂额,查不出问题所在。出现 这种问题就是MemeryLeak在做怪 了,在C/C++中这种问题总是会发 生,所以你一定要小心。一个 Rational的检测工作——Purify,可以 帮你测试你的程序有没有内存泄漏。 我保证,做过许多C/C++的工程的程 序员,都会对malloc或是new有些感 冒。当你什么时候在使用malloc和 new时,有一种轻度的紧张和惶恐的 感觉时,你就具备了这方面的修养 了。
对于malloc和free的操作有以下规 则:
1) 配对使用,有一个malloc,就应该 有一个free。(C++中对应为new和 delete)
2) 尽量在同一层上使用,不要像上面 那种,malloc在函数中,而free在函 数外。最好在同一调用层上使用这两 个函数。
3) malloc分配的内存一定要初始化。 free后的指针一定要设置为NULL。
4) 设计自己的内存分配链表,记载已 经分配的内存,便于在释放的时候有 备可查
注:虽然现在的操作系统(Linux和 Windows)都有进程内存跟踪机制, 也就是如果你有没有释放的内存,操 作系统会帮你释放。但操作系统依然 不会释放你程序中所有产生了 Memory Leak的内存,所以,最好还 是你自己来做这个工作。
char* AllocStrFromHeap(int len)
{
char *pstr;
if ( len <= 0 ) return NULL;
return ( char* ) malloc( len );
}
堆内存分配:(典型的函数: malloc)
char* AllocStrFromHeap(int len)
{
char *pstr;
if ( len <= 0 ) return NULL;
return ( char* ) malloc( len );
}
对于第一个函数,那块pstr的内存在 函数返回时就被系统释放了。于是所 返回的char*什么也没有。而对于第二 个函数,是从堆上分配内存,所以哪 怕是程序退出时,也不释放,所以第 二个函数的返回的内存没有问题,可 以被使用。但一定要调用free释放, 不然就是Memory Leak!
对于第一个函数,那块pstr的内存在 函数返回时就被系统释放了。于是所 返回的char*什么也没有。而对于第二 个函数,是从堆上分配内存,所以哪 怕是程序退出时,也不释放,所以第 二个函数的返回的内存没有问题,可 以被使用。但一定要调用free释放, 不然就是Memory Leak!
在堆上分配内存很容易造成内存泄 漏,这是C/C++的最大的“克星”,如果 你的程序要稳定,那么就不要出现 Memory Leak。
刚好前一段时间有一个Linux上的服务 应用程序,大约有几百的C文件编译 而成,运行测试良好,等使用时,时 间一长内存占用率就偏高,搞得许多 人焦头烂额,查不出问题所在。出现 这种问题就是MemeryLeak在做怪 了,在C/C++中这种问题总是会发 生,所以你一定要小心。一个 Rational的检测工作——Purify,可以 帮你测试你的程序有没有内存泄漏。 我保证,做过许多C/C++的工程的程 序员,都会对malloc或是new有些感 冒。当你什么时候在使用malloc和 new时,有一种轻度的紧张和惶恐的 感觉时,你就具备了这方面的修养 了。
在堆上分配内存很容易造成内存泄 漏,这是C/C++的最大的“克星”,如果 你的程序要稳定,那么就不要出现 Memory Leak。
刚好前一段时间有一个Linux上的服务 应用程序,大约有几百的C文件编译 而成,运行测试良好,等使用时,时 间一长内存占用率就偏高,搞得许多 人焦头烂额,查不出问题所在。出现 这种问题就是MemeryLeak在做怪 了,在C/C++中这种问题总是会发 生,所以你一定要小心。一个 Rational的检测工作——Purify,可以 帮你测试你的程序有没有内存泄漏。 我保证,做过许多C/C++的工程的程 序员,都会对malloc或是new有些感 冒。当你什么时候在使用malloc和 new时,有一种轻度的紧张和惶恐的 感觉时,你就具备了这方面的修养 了。
对于malloc和free的操作有以下规 则:
1) 配对使用,有一个malloc,就应该 有一个free。(C++中对应为new和 delete)
2) 尽量在同一层上使用,不要像上面 那种,malloc在函数中,而free在函 数外。最好在同一调用层上使用这两 个函数。
3) malloc分配的内存一定要初始化。 free后的指针一定要设置为NULL。
4) 设计自己的内存分配链表,记载已 经分配的内存,便于在释放的时候有 备可查
注:虽然现在的操作系统(Linux和 Windows)都有进程内存跟踪机制, 也就是如果你有没有释放的内存,操 作系统会帮你释放。但操作系统依然 不会释放你程序中所有产生了 Memory Leak的内存,所以,最好还 是你自己来做这个工作。
更多追问追答
追问
别这样…这段话我看过…我是倾向于用智能指针来解决这个问题的…但是现在问题是如果在程序执行中出现异常且没有捕获处理的话,不就没办法人为释放了么?我就是问的在这个情况下如何补救?
追答
清理内存的软件只针对一些缓存,都不包括空白文件夹,所以只能找到所在文件夹自己清理。
展开全部
你编写程序的软件安装在哪个磁盘你应该知道吧,然后你编完以后,如果不想要了,你可以到project 里面删了,至于你说的new,应该是新建工程什么的吧,这个是必须的步骤,没办法
追问
不是…使用动态内存…
new出动态内存来使用,之后没有还给系统…
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
再编个程序释放就可以了
更多追问追答
追问
那我总得获取那片内存的指针的…没有正确释放的话怎么获取它?怎么指向它?
追答
那你当初怎么使用它
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询