我在任何地方都找不到这个,即使它可能是微不足道的,我也想确定我已经很好理解了。我有 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 个字节,为指针 var%BEFORE 分配的 4 个整数类型字节(参见示例 3) 现在已被释放,对吗?
谢谢。