首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在内存中确定Fortran派生类型大小

在内存中确定Fortran派生类型大小
EN

Stack Overflow用户
提问于 2014-03-12 10:35:05
回答 1查看 1.9K关注 0票数 3

Fortran内部函数transfer可用于将派生类型转换为实数组或整数数组。在依赖于基元类型数组(整数、实等)的遗留系统中,这可能非常有用。为了坚持。

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

代码语言:javascript
运行
复制
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

在我的PC上,这是输出(这个结果至少与平台有关):

代码语言:javascript
运行
复制
 transfering...
 Integer transformation:                    42           0  1610612736  1074339512         
 999           0    -1610612736  1074108825

我的问题是,我“猜”到一个30元素长的整数数组足够大,足以存储这个数据结构。有方法可以确定数组需要多大才能存储整个数据结构吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-12 11:03:41

如果您有一个符合Fortran 2008标准的编译器,或者一个足够兼容的编译器,您将发现内部函数storage_size,它返回用于存储其参数的位数。如果做不到这一点,我所熟悉的大多数编译器都会实现一个非标准函数来实现这个功能;Intel编译器有一个名为sizeof的函数,它返回存储其参数所需的字节数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22348749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档