go语言 ioutil.ReadFile 与ioutil.ReadAll差别

Python030

go语言 ioutil.ReadFile 与ioutil.ReadAll差别,第1张

   当读取91.2 MB文件时,read1耗时43ms,read2耗时99ms。

查看源码:

读取文件主要是通过 Read(p []byte) (n int, err error) :

官方文档中关于该接口方法的说明:

结论:

  ReadFile(filename string)方法之所以速度快的原因就是先计算出file文件的size,在初始化对应size大小的buff,传入ReadRead(p []byte) 来读取字节流

原文链接: https://mp.weixin.qq.com/s/gW_3JD52rtRdEqXvyg-lJQ?st=17068D6966C713BFB3B2DFDED2100927184379EBD73179345AA52F7C4770FAB3D9B809F2DDAF6808BD4F4F8FCCC362C468BF936BDB8AD9CD3FD180F6EF4D5D7B47895F771EE88366C0FE695489FF8C80FD9E42300D22D2760A2418189B459A619E1BA2E0BBCA50455B277293988FAAA45BCB1075B07EDAA36B62D6A0CAA886E8045895054068CB955DED17A44781062708DF01AAFCDA746F6C50158B19E5E42A88D02F0ECC5D8BC4EC108AF374A720C972EE1C5D832F23B6B107DC32194F4B0A3840F4739B0806FA6523E2D7A86ABD79A0EFE634158A19905FDB65E67AE97871&vid=1688855587348942&cst=E9F266277367B28319F39975A546E7810FB56065BDFDF61A124CA07F8C69AF9566D809347DAA8BFB56A5A5BFDAC28DAC&deviceid=3f371756-5e39-4325-9fec-0b55bfeb87f5&version=4.0.6.6516&platform=win

所以,通过以上 AlignedBlock 函数分配出来的内存一定是 512 地址对齐的。

有啥缺点吗?

浪费空间嘛。 命名需要 4k 内存,实际分配了 4k+512 。

开源库地址: https://github.com/ncw/directio