首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Fortran中变量和静态数组的生存期

是指它们在程序执行过程中存在的时间段。在Fortran中,变量和静态数组的生存期由它们的作用域和存储类型决定。

  1. 变量的生存期:
    • 局部变量:局部变量的生存期从其声明点开始,到包含它的程序块执行结束时结束。局部变量通常在子程序或函数中声明,并且只在声明它们的子程序或函数内部可见。
    • 全局变量:全局变量的生存期从其声明点开始,直到程序执行结束时结束。全局变量在整个程序中都可见,可以在不同的子程序或函数中访问和修改。
  • 静态数组的生存期:
    • 静态数组的生存期与全局变量相同,从其声明点开始,直到程序执行结束时结束。静态数组在整个程序中都可见,可以在不同的子程序或函数中访问和修改。

Fortran中的变量和静态数组的生存期对于程序的正确执行非常重要。在变量或数组的生存期结束后,它们所占用的内存空间将被释放,可以被其他变量或数组使用。

在Fortran中,可以使用关键字"SAVE"来延长局部变量的生存期,使其在多次调用子程序或函数时保持其值不变。这对于需要在多次调用之间保持状态的变量非常有用。

在Fortran中,可以使用ALLOCATABLE关键字来声明动态数组,其生存期可以在运行时进行分配和释放。动态数组的生存期由程序员控制,可以根据需要进行动态分配和释放内存。

总结: Fortran中变量和静态数组的生存期由其作用域和存储类型决定。局部变量的生存期从声明点开始,到包含它的程序块执行结束时结束;全局变量和静态数组的生存期从声明点开始,直到程序执行结束时结束。在需要保持状态或动态分配内存的情况下,可以使用SAVE关键字或ALLOCATABLE关键字来控制变量和数组的生存期。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

fortran数组

本文由知乎答主木子穿叶提供 在前三篇笔记,学习了Fortran作为一个编程语言,最基本内容:变量,输入输出,流程控制程序结构。...注意,Fortran字符集不包括括号[],因此与c语言风格不同,Fortran数组分量操作全都是使用小括号()。...(与c/c++语言不同,我们不需要纠结Fortran声明定义区别,全部称为声明) nums(1) = 0 a = 2 nums(a) = nums(1) + 1 数组分量用法如上,数组分量索引可以是整数常量或者整数变量...real :: a(2,2) a(1,1) = 1 特别需要注意是,Fortran下标从1开始!Fortran对于高维数组在内存连续存储方式c语言是相反,分别为列优先行优先。...,而子程序/函数接收处理方式,取决于自己对形参定义:如果视作一个整数则只能访问修改地址,如果视作数组则会进一步访问到数组连续内存部分,依照自己理解尺寸进行处理。

55410

7.5 变量存储方式生存期

3、内存供用户使用存储空间可以分为3部分,程序区、静态存储区、动态存储区。 4、全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。...(2)函数定义没有用关键字static声明变量,即自动变量、 (3)函数调用时现场保护返回地址等。 6、在C语言中,每一个变量函数都有两个属性:数据类型和数据存储类别。...02 局部变量存储类别 1、自动变量(auto变量) 函数局部变量,如果不专门声明static存储类别,都是动态地分配存储空间,数据存储在动态存储区。...2、静态局部变量(static局部变量) 函数局部变量值在函数调用结束后不消失而继续保留原值,即其占用存储单元不释放,在下一次再调用该函数时,该变量已有值。...2、将外部变量作用域扩展到其他文件。 3、将外部变量作用域限制在本文件。 4、注意,用auto、registerstatic声明变量时,是在定义变量基础上加上这些关键字,而不能单独使用。

7533229
  • 6.7 变量存储方式生存期

    一、动态存储方式与静态存储方式 C语言中,每一个变量函数都有两个属性:数据类型和数据存储类别 从变量值存在时间来观察,变量存储有两种方式静态存储方式动态存储方式 ?...二、局部变量存储类别 (1)自动变量(auto变量) 函数局部变量,如果不专门声明为static(静态)存储类别,都是动态地分配存储空间 。...” (2)静态局部变量(static局部变量) 作用:局部变量值在函数调用结束后不消失而继续保留原值 (3)寄存器变量(register) 为了提高执行效率,允许将局部变量值放在CPU...寄存器,需要用时直接从寄存器 去除参加运算,不必再到内存中去存取,这种变量叫做寄存器变量 ?...”,表示把该外部变量作用域扩展到此位置 (2)将外部变量作用域扩展到其他文件 (3)将外部变量作用域限制在本文件 原创不易,未经本公众号允许禁止转载,否则追究法律责任

    5893129

    7.5 C语言变量存储方式生存期

    3、内存供用户使用存储空间可以分为3部分,程序区、静态存储区、动态存储区。 4、全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。...(2)函数定义没有用关键字static声明变量,即自动变量、 (3)函数调用时现场保护返回地址等。 6、在C语言中,每一个变量函数都有两个属性:数据类型和数据存储类别。...02局部变量存储类别 1、自动变量(auto变量) 函数局部变量,如果不专门声明static存储类别,都是动态地分配存储空间,数据存储在动态存储区。...2、静态局部变量(static局部变量) 函数局部变量值在函数调用结束后不消失而继续保留原值,即其占用存储单元不释放,在下一次再调用该函数时,该变量已有值。...2、将外部变量作用域扩展到其他文件。 3、将外部变量作用域限制在本文件。 4、注意,用auto、registerstatic声明变量时,是在定义变量基础上加上这些关键字,而不能单独使用。

    7943027

    Fortran陷阱——可分配数组size

    早期Fortran程序多使用静态数组。在编译时,静态数组被分配固定存储空间,且在程序运行过程静态数组大小是不会改变。为了能够存储足够多数据,静态数组大小需要足够大,这会造成内存浪费。...如果静态数组大小不够大,程序运行也可能会出现错误。 在Fortran90标准之后,我们可以很方便地使用可分配数组。...使用allocatable属性定义可分配数组,allocatedeallocate语句动态地为数组分配释放内存。使用size语句可以查询可分配数组大小(元素总数)。...随后输出values大小所有元素值。主程序先取modify_size输入参数为5,再取0。...5,并且数组元素全是1。

    2.8K20

    Java静态变量(类变量)、实例变量、局部变量成员变量

    学习Java过程,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间关系区别。...//成员变量静态变量(类变量) public static String level = "SSS"; //成员变量静态变量(类变量) public int getAge...成员变量:作用范围是整个类,相当于C全局变量,定义在方法体语句块之外,一般定义在类声明之下;成员变量包括实例变量静态变量(类变量); 实例变量:独立于与方法之外变量,无static修饰,...声明在一个类,但在方法、构造方法语句块之外,数值型变量默认值为0,布尔型默认值为false,引用类型默认值为null; 静态变量(类变量):独立于方法之外变量,用static修饰,默认值与实例变量相似...,一个类只有一份,属于对象共有,存储在静态存储区,经常被声明为常量,调用一般是类名.静态变量名,也可以用对象名.静态变量名调用; 局部变量:类方法变量,访问修饰符不能用于局部变量,声明在方法、构造方法或语句块

    2.2K20

    Java 菜鸟入门 | Java静态变量、实例变量、局部变量成员变量

    前言 学习 Java 过程,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间关系区别。...成员变量 作用范围是整个类,相当于 C 语言中全局变量,定义在方法体语句块之外,一般定义在类声明之下;成员变量包括实例变量静态变量(类变量)。...实例变量 独立于与方法之外变量,无 static 修饰,声明在一个类,但在方法、构造方法语句块之外,数值型变量默认值为 0,布尔型默认值为 false,引用类型默认值为 null。...静态变量(类变量) 独立于方法之外变量,用 static 修饰,默认值与实例变量相似,一个类只有一份,属于对象共有,存储在静态存储区,经常被声明为常量,调用一般是类名.静态变量名,也可以用对象名.静态变量名调用...,随对象消失而消失 随方法调用而存在,随方法运行结束而消失 作用域 所属大括号 总结 以上就是关于 Java 编程静态变量、类变量、实例变量、局部变量以及成员变量之间相关区别了。

    1.5K20

    VBA数组、集合字典(二)——对数组变量赋值

    上次我们对比学习了一下ExcelVBA数组、集合字典概念和声明语法,我个人觉得在声明部分,三者区别还是挺大。...下面我们一块学习一下赋值方面的知识点,因为内容较多,我们今天就先学习一下给数组变量赋值内容 三、赋值 不管是数组、集合还是字典,都有向变量赋值操作,赋值也是这几个概念核心关键,操作也有很大不同。...1.向数组变量赋值 对数组来说,数组每个元素数据类型必须相同,从数组声明就可以看出,这是数组与集合字典明显不同。这就要求向数组变量赋值时数据规范必须严格。...于是,我们在循环中重定义数组代码中加上ReDim参数Preserve,它意思就是当arr是一个动态数组,用ReDim Preserve重定义arr修改长度时,不清空之前数组元素(Redim 不能重定义静态数组长度...整体赋值要求数组变量在声明时必须声明为动态数组或者Variant类型,不能向声明为静态数组变量赋值,如果声明成静态数组变量被整体赋值,即使数组长度一致,也会报错。

    6.9K30

    java静态全局变量全局变量区别_java静态全局变量

    但是,不幸是,Java从技术上不允许在全局范围内创建变量。 在本文中,我们将介绍如何在Java模拟使用全局变量。 什么是全局变量? 全局变量是可以从任何范围访问变量。...通过纯粹面向对象,鼓励开发人员将相关变量函数保持在一起,从而使程序整体上更有条理。这也可以帮助确定文档记录不充分目的。...你们都根据自己假设对不同功能进行了更改,并根据需要修改引用了该值。 订阅我们新闻 在收件箱获取临时教程,指南和作业。从来没有垃圾邮件。随时退订。...订阅电子报 订阅 这是Java试图通过没有全局变量来避免那种情况。在大型项目中使用全局变量会导致意外意外行为,因为在代码不同部分声明修改了变量。 如何在Java模拟全局变量?...如果上面的变量被创建为真正全局变量,则很可能在不同文件创建了它们,这使得查找作者预期目的变得更加困难。

    4.5K40

    C++关于[]静态数组new分配动态数组区别分析

    大家好,又见面了,我是全栈君 这篇文章主要介绍了C++关于[]静态数组new分配动态数组区别分析,很重要概念,需要朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组new分配动态数组区别...具体区别如下: 一、对静态数组名进行sizeof运算时,结果是整个数组占用空间大小; 因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组长度。...二、静态数组作为函数参数时,在函数内对数组名进行sizeof运算,结果为4,因为此时数组名代表指针即一个地址,占用4个字节内存(因为在传递数组参数时,编译器对数组长度不做检查,具体可参考前面一篇...四、通过函数返回一个数组问题 函数声明静态数组不可能通过函数返回,因为生存期问题,函数调用完其内部变量占用内存就被释放了。...其原因可以这样理解,因为[]静态数组是在栈申请,而函数局部变量也是在栈,而new动态数组是在堆分配,所以函数返回后,栈东西被自动释放,而堆东西如果没有delete不会自动释放。

    88230

    java 静态变量 存储_Java存储静态方法和静态变量在哪里?「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 静态方法(实际上所有方法)以及静态变量都存储在PermGen部分,因为它们是反射数据一部分(类相关数据,而不是与实例相关)。...需要澄清最新情况: 注意,只有变量及其技术值(原语或引用)存储在PermGen空间中。 如果静态变量是对象引用,则该对象本身存储在堆正常部分(年轻/旧代或幸存者空间)。...一个关于垃圾收集词: 做不倚靠finalize()因为它不一定会跑。这完全取决于JVM何时运行垃圾收集器收集什么,即使一个对象符合垃圾收集条件。...当然,您可以将静态变量设置为NULL,从而删除对堆上对象引用,但这并不意味着垃圾回收器将要收集它(即使没有更多参考资料)。...上面的内容是基于HotsforJava 56(它们基本上是相同),因为在回答时,我想说大多数人都使用这些JVM。

    2.7K10

    详解java静态方法有哪些_java类静态变量

    定义: 在类中使用static修饰静态方法会随着类定义而被分配装载入内存;而非静态方法属于对象具体实例,只有在类对象创建时在对象内存才有这个方法代码段。...原因: 因为静态方法和静态数据成员会随着类定义而被分配装载入内存,而非静态方法静态数据成员只有在类对象创建时在对象内存才有这个方法代码段。...第一次使用类时候)执行一次,往往用来初始化静态变量。...return t; } } } 总结: (1)static修饰静态方法会随着类定义而被分配装载入内存,编译器只为整个类创建了一个静态变量副本...(2)静态不能引用非静态这一特性,是由于静态会随着类定义而被分配装载入内存这一关键点决定;如果静态引用了非静态,根本无法从内存中找到非静态代码段,势必会出错,这种做法是Java虚拟机决不允许

    1.4K10

    静态变量成员变量区别 && 成员变量和局部变量区别

    ============================================================================= 1)静态变量成员变量区别: (1):所属不同...成员变量:属于对象,也称为对象变量或实例变量。 (2):在内存位置不同:     静态变量:存储于方法区静态区。     成员变量:存储于堆内存。...(3):生命周期不同:     静态变量静态变量是随着类加载而加载,随着类消失而消失。     成员变量:成员变量是随着对象创建而存在,随着对象消失而消失。...局部变量:在方法定义或者方法声明上(即形参)。 (2)在内存位置不同:     成员变量:在堆。     局部变量:在栈。...(5)注意事项:     1.局部变量名称可以成员变量名称一样,但是在方法中使用该变量时候,采用是就近原则(即先找小范围,再找大范围)。

    1.6K20

    局部变量静态局部变量,全局变量静态全局变量在内存存放区别(转)

    3、全局区(静态区)(static)—,全局变量静态变量存储是放在一块,初始化全局变量静态变量在一块区域, 未初始化全局变量未初始化静态变量在相邻另一块区域。...4、全局/静态存储区,全局变量静态变量被分配到同一块内存,在以前c语言中,全局变量又分为初始化未初始化,在c++里面没有这个区分了,他们共同占用同一块内存区。  ...2、所谓栈区,低地址(小于exe基地址),拥有可读写属性,exe没有对应区段,系统加载dll时自动生成,由于内存地址使用方式从大往小减,所以数量有限,尽量不要定义过大数组变量。...3、全局区(静态区)(static)—,全局变量静态变量存储是放在一块,初始化全局变量静态变量在一块区域, 未初始化全局变量未初始化静态变量在相邻另一块区域。...是在编译时就确定;  但是,在以后存取,在栈上数组比指针所指向字符串(例如堆)快。

    5.2K80

    C++关于使用[]定义静态数组new分配动态数组区别

    静态数组: int a[20]; int b[] = {1, 2, 3} 静态数组长度为常量,在栈中分配内存空间,会自动释放。使用sizeof时,计算是整个数组字节大小。...动态数组: int len = 20; int *a = new int[len]; delete a; 动态数组在堆中分配内存,必须手动释放。...使用sizeof时,计算是指针变量所占内存字节大小。 在使用时,如果数组大小已经确定,可以使用静态数组,效率较高;如果数组大小需要在运行时确定(比如用户输入,函数参数传递等),则使用动态数组。...此外,如果需要在函数返回数组,则必须注意用静态数组时,由于内存在栈中分配,函数执行完毕时会自动销毁,所以返回一个静态数组变量是无意义;使用动态数组就可以返回,并在不需要时注意delete释放堆内存

    1.5K10

    【小家java】类静态代码块、构造代码块、静态变量、成员变量执行顺序继承逻辑

    其中继承,是java中最有学问一点也是最相对来说最难理解一些东西,本文针对于此,做一些实例分析,希望能够帮助大家理解java继承机制 2、栗子 情况一:当父类子类有同名同类型属性时,使用时需要注意...父类子类变量是同时存在,即使是同名。子类中看到是子类变量,父类中看到是父类变量,它们互相隐藏,而同名方法则是实实在在覆盖(重写),属性不存在重写哟。...我觉得脑子里应该浮现出一个这样知识点: Java赋值顺序: 1、父类静态变量赋值 2、自身静态变量赋值 3、父类成员变量赋值父类块赋值 4、父类构造函数赋值 5、自身成员变量赋值自身块赋值...只有在准备阶段初始化阶段才会涉及类变量初始化赋值,因此只针对这两个阶段进行分析; 类准备阶段:需要做是为类变量(static变量)分配内存并设置默认值(注意此处都是先给默认值),因此类变量st...类构造器:编译器收集所有静态语句块变量赋值语句,按语句在源码顺序合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象初始化了(看到没,这个时候

    1.5K20

    static静态变量在内存存储

    static用来控制变量存储方式可见性 函数内部定义变量,在程序执行到它定义处时,编译器为它在栈上分配 空间,函数在栈上分配空间在此函数执行结束时会释放掉,这样就产生了一个 问题...: 如果想将函数变量值保存至下一次调用时,如何实现?...最容易想 到方法是定义一个全局变量,但定义为一个全局变量有许多缺点,最明显 缺点是破坏了此变量访问范围(使得在此函数定义变量,不仅仅受此 函 数控制)。...静态数据成员要实际地分配空间,故不能在类声明定义(只能声明数据 成员)。类声明只声明一个类“尺寸规格”,并不进行实际内存分配,所 以在类声 明写成定义是错误。...(3)由于静态成员声明于类,操作于其外,所以对其取地址操作,就多少 有些特殊,变量地址是指向其数据类型指针 ,函数地址类型是一个 “nonmember函数指针”。

    2K20

    java static 变量存在哪_Java静态方法和静态变量存储在哪里?

    大家好,又见面了,我是你们朋友全栈君。 小编典典 静态方法(实际上是所有方法)以及静态变量都存储在PermGen堆部分,因为它们是反射数据(与类相关数据,而不与实例相关数据)一部分。...更新说明: 请注意,只有变量及其技术值(原始或引用)存储在PermGen空间中。 如果你静态变量是对对象引用,则对象本身存储在堆常规部分(青年/旧世代或幸存者空间)。...当然,你可以将静态变量设置为null,从而删除对堆上对象引用,但这并不意味着垃圾收集器将收集它(即使没有更多引用了)。...最后要注意是:如何存储代码,运行时数据等取决于所使用JVM,即HotSpot可能与JRockit不同,并且在同一JVM版本之间甚至可能有所不同。...上面的内容基于Java 56HotSpot(基本上是相同),因为在回答之时,我会说大多数人都使用了这些JVM。

    2K30

    静态代码块、静态变量,构造代码块、实例变量执行顺序继承逻辑

    变种面试题 原因: 冷知识 case4:子类父类有`同名同类型``静态`变量时候 case5:静态代码块属于类,并且优先于main方法执行(有难度) 注解对执行顺序影响 继续补充:子类默认调用...从结果,这里先给你扔个结论: 先初始化静态变量,也就是执行new StaticTest(),从而打印:2 再执行构造函数,打印:3a=110,b=0 为何a=110,而b却为0呢? 1....只有在准备阶段初始化阶段才会涉及类变量初始化赋值,因此只针对这两个阶段进行分析; 类准备阶段:需要做是为类变量(static变量)分配内存并设置默认值(注意此处都是先给默认值),因此类变量st...类构造器:编译器收集所有静态语句块变量赋值语句,按语句在源码**顺序(请注意这三者是有序)**合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象初始化了...结论就不用解释了:静态变量属于类继承无关。

    95850
    领券