- 主题:怎么能快速读取一个txt文件到内存
取决于你的数据格式。bin方式就是把一段内存原封不动的写到文件中,读反过来。
文件可靠性和txt一样。
【 在 cleaf 的大作中提到: 】
: 这种情况,存储的时候就不需要存储换行符了吧,直接把文件拷贝进来,到一个数组里就可以?
: 【 在 foliver 的大作中提到: 】
: : double 8个字节,你的格式文本也是8个字节,二进制存double体积不会变大,转化过程没有了,性能提升明显。
: ...................
--来自微水木3.5.10
--
FROM 39.144.39.*
谢谢
【 在 liuxueshen 的大作中提到: 】
: 如果二进制存储出错转成ASCII错误只会更多。
: 只要确定不会出8字节存成7字节之类的就没严重问题。
:
--
FROM 111.201.208.*
直接存二进制,不要转成字符串。
float就可以,都不需要double,一个数4个字节,文件大小可以小一半。
如果怕出错可以在中间插几个检验字节。比如一兆加一个检验。
【 在 cleaf 的大作中提到: 】
: txt里面是字符形式存储的double类型:
: 1.03e+10
: 2.05e-06
: ...................
--
FROM 120.244.156.*
嗯,我正好做过优化
当是一侧是emulator,一侧是C
运行在emulator上的RTL通过DPI-C调用(every posedge clk),把数据送到C里,C写到文件里
一旦做格式化(不管是任何格式化),就会导致硬件侧等待软件侧。
后来直接存二进制,在每cycle写的不多的情况下,可以完全不拖慢硬件速度。
然后再写个小程序来做读入二进制,写出格式化数据,这样总的时间要比在线做格式化+写快得多。
写的时候也试了mmap, 对于binary格式,速度还不如fwrite,
可以参考我这篇日志
https://segmentfault.com/a/1190000023431834
我的结论(和我用的nfs有关)
fwrite在绝大分场景下比mmap快, 当写入量为4GB左右时, fwriter用时10.5 sec, mmap用时29.6 sec.
用fread读入4GB binary数据, 用fwrite写出8.9GB数据时需要103.4 sec
用mmap读入4GB binary数据, 用fwrite写出8.9GB数据时需要88.1 sec
producer比较快, consumer比较慢, producer 2秒可以产生1GB数据,consumer需要20 sec左右才可以处理完。当两者并行跑时,收益并不高。
【 在 dormouseBHU 的大作中提到: 】
: 直接存二进制,不要转成字符串。
: float就可以,都不需要double,一个数4个字节,文件大小可以小一半。
: 如果怕出错可以在中间插几个检验字节。比如一兆加一个检验。
--
FROM 101.86.19.*
re
【 在 here080 的大作中提到: 】
: 其实如果楼主能控制怎么存,那问题性质就变了。
: 楼主自己也说了,读不慢,慢的是解析。
: 所以问题就从“如何快速解析字符形式的浮点数”变成了“如何快速的序列化/反序列化浮点数”。
: ...................
--
FROM 120.245.5.*
打印二进制到文本格式提升空间也挺大,double-conversion称霸十多年了,前两年出了个ryu,轻轻松松超过了3-5倍,对比标准库也是轻松10倍以上。boost里也开始用ryu了。
【 在 chenjinyuan 的大作中提到: 】
: 卧槽,10倍。。没想到这个都有那么大空间
: 【 在 here080 的大作中提到: 】
: : 比方说,能问出“如何快速解析浮点数”这个问题,外加英语OK,就能查到google第一条:
: ....................
--
FROM 218.108.146.*