gpt4 book ai didi

fortran - 确定 Fortran 派生类型在内存中的大小

转载 作者:行者123 更新时间:2023-12-02 17:22:19 27 4
gpt4 key购买 nike

Fortran 内部函数 transfer 可用于将派生类型转换为实数或整数数组。当在依赖原始类型(整数、实数等)数组进行持久化的遗留系统中工作时,这可能非常有用。

下面的代码至少在 ifortgfortran 上运行,并将简单的派生类型示例转换为整数数组(使用解决方案更新) :

program main
implicit none

integer, parameter :: int_mem_size = storage_size(1)

type subtype
integer a
double precision b
end type subtype

type :: mytype
integer :: foo
double precision :: bar
type(subtype) :: some_type
end type

type(mytype) :: my_var
type(subtype) :: my_subtype

! Old version: integer :: x(30)
integer, allocatable :: x(:)
integer :: mem_size

!Allocate array with required size
mem_size = storage_size(my_var)
allocate(x(mem_size/int_mem_size))

my_subtype%a = 1
my_subtype%b = 2.7

my_var%foo = 42
my_var%bar = 3.14
my_var%some_type = my_subtype

write(*,*) "transfering..."
x = transfer(my_var, x)
write(*,*) "Integer transformation:", x

end program main

在我的电脑上,这是输出(该结果至少与平台相关):

 transfering...
Integer transformation: 42 0 1610612736 1074339512
999 0 -1610612736 1074108825

我的问题是我“猜测”30 个元素长的整数数组足够大来存储这个数据结构。有没有办法确定数组需要多大才能存储整个数据结构?

最佳答案

如果您有一个兼容 Fortran 2008 的编译器,或者足够兼容的编译器,您会发现内部函数 storage_size 返回用于存储其参数的位数。我所熟悉的大多数编译器都未能实现非标准函数来执行此操作;英特尔 Fortran 编译器有一个名为 sizeof 的函数,它返回存储其参数所需的字节数。

关于fortran - 确定 Fortran 派生类型在内存中的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com