use*_*314 1 size fortran binaryfiles double-precision
我对此非常困惑.我转出一个大小为16000*4*2的3D数组,其中所有元素都是DOUBLE PRECISION,我认为我应该得到一个大小为16000*4*2*8字节/ dp = 1,024,000字节的文件.但我一直得到2,048,000字节.
我测试了一个简单的测试程序:
PROGRAM testprog
IMPLICIT NONE
DOUBLE PRECISION :: x=0.0D0
INTEGER :: i
OPEN(UNIT=128,FILE='try.out',FORM='UNFORMATTED',ACCESS='SEQUENTIAL')
DO i=1,16000*4*2
WRITE(128) x
ENDDO
CLOSE(128)
ENDPROGRAM testprog
Run Code Online (Sandbox Code Playgroud)
并使用以下命令运行它:
gfortran f.f90 -o a
./a
ls -als try.out
Run Code Online (Sandbox Code Playgroud)
而我得到的是
2000 -rw-r--r-- 1 jipuwang umstudents 2048000 Dec 17 20:16 try.out
Run Code Online (Sandbox Code Playgroud)
我无法理解它.一个双精度使用2个字节对吗?
我做了别的事,如果有人也能帮我理解这个:
PROGRAM testprog
IMPLICIT NONE
DOUBLE PRECISION :: x=0.0D0
INTEGER :: i
OPEN(UNIT=128,FILE='try.out')
DO i=1,2
WRITE(128,*) x
ENDDO
CLOSE(128)
ENDPROGRAM testprog
Run Code Online (Sandbox Code Playgroud)
它给了我一个大小为54字节的文件.
未格式化的顺序文件 - 您正在使用的是一种面向记录的文件格式.对于每个记录,通常将一些簿记字段写入文件以使处理器能够从记录导航到记录.细节可能因编译器而异,但编译器之间存在合理的一致性.
因为您调用WRITE 16000*4*2次,所以您正在编写16000*4*2条记录.您将产生16000*4*2批次的每记录开销.每个记录的八个字节的开销(四个字节的长度超前和跟踪记录数据)是典型的.
如果这个开销有问题,那么考虑为每条记录写更多的值.您甚至可以将整个数据集放在一个记录中.
双精度变量通常占用8个字节,但它会因平台,编译器和编译选项而异.