由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 新人5个包子请教问题,redhat读写文件的内存问题 (转载)
相关主题
multi-thread 一问,【贴图】这个人的Emacs + GDB 是怎么做出来的? (转载)
有没有现成的模拟fread的bufferRead()?关于C C++ 和java的文件读写问题
Python里边file writer的问题A question related to pipe
does the system guarantee this? (转载)请问如何恢复正常的IO?
OpenGL能否方便实现自定义图形的移动,擦除和分层显示?emacs里面有没有快捷建能交换2个窗口的内容? (转载)
问一个vim的问题ask a simple question about int pointer.
为什么redbox比netflix好用的多?如何动态分配内存来存储输入的不定长的字符串,char not string类型的
URL questions如何循环播放一个mp3文件中的某一段?
相关话题的讨论汇总
话题: lenhost话题: lennet话题: fread话题: readed话题: mem
进入Programming版参与讨论
1 (共1页)
S*****y
发帖数: 567
1
【 以下文字转载自 Linux 讨论区 】
发信人: Schummy (QQ), 信区: Linux
标 题: 新人5个包子请教问题,redhat读写文件的内存问题
发信站: BBS 未名空间站 (Tue Apr 10 18:18:18 2012, 美东)
希望有个大虾能给解释下。
版本是2.6.32-71.el6.x86_64
发现读取文件后,free mem大幅下降。文件很大,10几G的样子
total used free shared buffers cached
Mem: 32091 24459 7632 0 7 23250
-/+ buffers/cache: 1200 30891
Swap: 34271 21 34250
就是这里free/Mem那一格
网上查了说看是否内存泄漏应该看swap?
我有一个程序,读取文件。
如果我手动清理掉used Mem
echo 3 > /proc/sys/vm/drop_caches
然后跑一次那个程序。就会看到大概10个G的内存被用了,没有释放(文件大小差不多)
然后速度是1分钟。
然后在不释放那些内存的情况下,再跑n次,每次都是10秒钟。包括读取另外一个差不
多大小的文件,也是10秒钟的样子。free还是会减少,swap没什么变化。
请教为什么会造成速度上的差别呢?
另外如果我如果我手动清理掉used Mem,不跑那个程序。只是往硬盘写入一个10G的文
件,也是会看到free大大减少。
程序是
uint16_t lenNet, lenHost;
char buffer[65536];
char* bbuf = buffer;
int readed;
const int FIRST_READ = sizeof(unsigned short int);
readed = fread(&lenNet, FIRST_READ, 1, fp);
while(readed==1){
lenHost = rip_ntohs(lenNet);
fread(buffer, lenHost, 1, fp);
readed = fread(&lenNet, FIRST_READ, 1, fp);
}
buffer是会自己释放的吧
谢谢了
d****n
发帖数: 1637
2
I wonder how the below code break the loop.
if lenHost is signed number it could be a problem for fread.
fread convert it to a unsigned large number and read the huge block at one
shot.
check if lenHost defined correctly as size_t or the limits.
while(readed==1){
lenHost = rip_ntohs(lenNet);
fread(buffer, lenHost, 1, fp);
}
S*****y
发帖数: 567
3
lenNet,lenHost
都是uint16_t...
然后我跑了测试了,lenHost最大20。
其实是很多条message。第一个是表示message的长度。文件都是读完处理完了,应该没
有太大问题。有问题就跑不完了。

【在 d****n 的大作中提到】
: I wonder how the below code break the loop.
: if lenHost is signed number it could be a problem for fread.
: fread convert it to a unsigned large number and read the huge block at one
: shot.
: check if lenHost defined correctly as size_t or the limits.
: while(readed==1){
: lenHost = rip_ntohs(lenNet);
: fread(buffer, lenHost, 1, fp);
: }

y***d
发帖数: 2330
4
-/+ buffers/cache: 1200 30891
it means the actual free memory was 30891.
Most of the memory was 'used' as disk cache, which would be dumped whenever
a program needed some amount of memory.
so there is nothing to worry about.

【在 S*****y 的大作中提到】
: 【 以下文字转载自 Linux 讨论区 】
: 发信人: Schummy (QQ), 信区: Linux
: 标 题: 新人5个包子请教问题,redhat读写文件的内存问题
: 发信站: BBS 未名空间站 (Tue Apr 10 18:18:18 2012, 美东)
: 希望有个大虾能给解释下。
: 版本是2.6.32-71.el6.x86_64
: 发现读取文件后,free mem大幅下降。文件很大,10几G的样子
: total used free shared buffers cached
: Mem: 32091 24459 7632 0 7 23250
: -/+ buffers/cache: 1200 30891

b***i
发帖数: 3043
5
你的程序很不全,连括号都对不上,那个readed并没有每次更新,那你怎么跳出while
循环?

【在 S*****y 的大作中提到】
: lenNet,lenHost
: 都是uint16_t...
: 然后我跑了测试了,lenHost最大20。
: 其实是很多条message。第一个是表示message的长度。文件都是读完处理完了,应该没
: 有太大问题。有问题就跑不完了。

S*****y
发帖数: 567
6

while
不好意思,是,我下午没有写好,把中间的注释删的时候没注意,修改了。

【在 b***i 的大作中提到】
: 你的程序很不全,连括号都对不上,那个readed并没有每次更新,那你怎么跳出while
: 循环?

1 (共1页)
进入Programming版参与讨论
相关主题
如何循环播放一个mp3文件中的某一段?OpenGL能否方便实现自定义图形的移动,擦除和分层显示?
[合集] 大拿们,问一个redhat linux下C编程 make error 139的问问一个vim的问题
奇怪的问题:关于一个简单的malloc()小程序 (转载)为什么redbox比netflix好用的多?
菜鸟问题:关于写DataBase的问题 —— CDaoDatabaseURL questions
multi-thread 一问,【贴图】这个人的Emacs + GDB 是怎么做出来的? (转载)
有没有现成的模拟fread的bufferRead()?关于C C++ 和java的文件读写问题
Python里边file writer的问题A question related to pipe
does the system guarantee this? (转载)请问如何恢复正常的IO?
相关话题的讨论汇总
话题: lenhost话题: lennet话题: fread话题: readed话题: mem