我总是被告知需要释放之前的malloced记忆。但是,由于我多次忘记释放记忆,因此程序并没有显示出任何差异。我想知道是否有任何代码片段来展示之前的foget free memory malloced的危害。如果我放开它们,这些似乎没问题。
...
int i;
char *buff[64];
for( i = 0; i < 64; i++ ) {
buff[i] = malloc(1024*100);
strcpy( buff[i], "Some String");
puts(buff[i]);
}
...
答案 0 :(得分:1)
如果分配大量内存或重复分配内存,则会出现问题。分配64次100 KiB在现代计算机上不会让你受伤,但试着想象分配让100MB而不是释放它。
此外,如果你为不同的设备编程而不是PC(比如一些微控制器),内存要少得多(可能是数百个KiB或MiB),那就更大了。
为了缩短它 - 它可能不会在短期内伤害到你,但从长远来看,它可能是一个大问题。免费分配内存是一种很好的做法。如果你不想手动完成,那么你可以寻找一些智能指针和类似的解决方案(如果你可以使用C ++)。
答案 1 :(得分:1)
好的,我会解释这个问题。
因此,计算机的页面大小有限(内存块)。如果正在运行的进程需要的页数超过限制,会发生什么?
稍后该过程可能需要一个换出的页面,因此操作系统会将其交换,因为硬盘速度慢得多,会严重影响性能
如果有很多交换操作,这称为颠簸。
所以底线,如果有一个进程泄漏内存。系统将保持颠簸,进程将在一个长队列中等待硬盘设备。
我还鼓励您了解计算机体系结构和操作系统,以获得深入的见解。
答案 2 :(得分:-1)
如果您没有释放分配的内存,请尝试以下更改以使其具有足够的已分配内存以导致问题:
UIScrollView
那差不多是300千兆字节。