由于ubifs文件系统是运行在RAM上,当机器突然断电的时候,运行在ram上面的操作无法保存,比如我向fs里面存入一个文本文件,没有执行“sync”指令的时候,突然断电重启机器,文本文件是无法保存的,我想做到当我操作fs的时候,机器会自动保存,这个要怎么实现?
还有我发现采用官方AM1808的linux系统,当我调用系统内存的时候,使用完后,并不会自动释放,需要我使用指令对数据进行同步和释放内存,这样操作确实麻烦,请问需要怎么自动释放不需要的内存呢?
Jian Zhou:
这种掉电保护,实际上文件系统是有一套成熟的机制的,这也是文件系统的feature之一,你可以上网查一下ubifs这部分是怎么做的。
如果是堆区的内存管理,肯定是要自己控制malloc和free的。
guibin cai:
回复 Jian Zhou:
关于内存释放的问题,我举个例子,我用一个很大的数据包,例如50000byte,通过电脑不断的ping机器的网络,机器的内存为128Mbyte,在ping三天后,机器的内存只剩下20Mbyte了,如果在ping2天,我的app层就挂点了,网络也挂掉了,我觉得,在网络这块的,默认的系统驱动并没有对网络的内存进行很好的管理,而造成的系统资源的浪费,当我使用“echo 3 >/proc/sys/vm/drop_caches”这样的指令对系统进行内存释放,才能把内存释放掉,同样,当我在机器的nandflash中,对一个文件进行多次拷贝后,一样出现系统内存不会自动释放,需要通过前面的指令才能释放,请问这个是什么原因
Yaoming Qin:
1. 如果突然掉电,ram的东西是不能保存的,如果对可靠性要求很高,可以考虑加个电池解决这个问题。
2. 如果用C或者C++编程,内存是要自己管理的,包括分配和释放,如果是JAVA可以不用管这个。
Jian Zhou:
回复 guibin cai:
ping网络导致内存泄漏,这个感觉更像是应用层的问题。
文件操作,应用的层的内存管理要靠程序控制,比如打开一个文件,其申请的内存必要执行关闭文件才能释放