【发布时间】:2012-12-21 17:36:47
【问题描述】:
我在任何地方都找不到这个,即使它可能是微不足道的,我也想确定我已经很好地理解了。我有 4 个问题(严格相关):
1)如果我像这样在 fortran 中定义派生类型
TYPE :: node
INTEGER :: int
REAL :: REALfirst
REAL :: REALsecond
END TYPE
TYPE(node) :: var
allocate(var)
经过上述分配后,整数占用 4 个字节,2 个单精度实数占用 8 个字节,共 12 个字节。它们是否连续位于内存中?以及计算机如何存储有关变量类型的信息?我想它需要一些额外的内存来保存。
2)如果在上面的例子中而不是
TYPE(node) :: var
我会写:
TYPE(node),POINTER :: var
我猜如果我编译了一个 32 位可执行文件,则 ALLOCATE 语句将分配与上面示例中相同的内存量。对吗?
3)现在假设我声明了类型
TYPE :: node
INTEGER :: int
TYPE(node), POINTER :: BEFORE
TYPE(node), POINTER :: AFTER
END TYPE
TYPE(node) :: var
allocate(var)
这里(如果编译为 32 位)它将为整数分配 4 个字节,为 2 个指针分配其他 8 个字节,总共 12 个字节。对吗?再次,计算机如何存储有关变量类型的信息?
4)在例子(3)中,如果我现在写ALLOCATE(var%BEFORE),另外12个字节分配给一个派生类型节点的变量,4个字节的整数类型分配给指针var% BEFORE(参见示例 3)现在已被释放,对吗?
谢谢 A.
【问题讨论】:
-
我认为这个问题不值得这么多下注。发帖者可能有一些误解,但他的问题是合理的。