在优化程序的过程中发现其中存在大量的派生类型变量(type),同时发现Fortran子程序可以接受type类型数组中元素,即将type类型中元素当作独立的数组传递。传递过程如下所示:

...

为了测试派生类型数组传递的速度,编写如下程序进行对比

module 

更改不同的num值可以得到程序耗时结果,

从表格中可以看出传递type数组中元素所耗时间是直接传递数组所需时间的3倍,当然两种数组的大小应该在10000000以上才能体现差别。尽管在传递数组中元素在程序编写上很方便,但是程序中存在需要频繁传递变量的子程序时需要格外的注意。避免传递type数组额外耗时的解决方案:

  1. 使用module将变量封装在不同模块中,子程序使用不同module来达到传递变量的作用。经过上述的程序可以发现使用type数组类型和使用数组在子程序中的耗时是一致的,说明子程序在传递函数的过程中会将type数组转变为数组,同时在运算之后会传递回去。
  2. 将type中的元素直接定义为数组,在需要传递数组时直接传递type中数组。在实践的过程中往往需要的是动态数组,如果type中的元素过多,在使用时可能会导致各元素大小不一致,需要额外的检查程序。

fortran subroutine_Fortran:派生数组与数组传递进子程序耗费时间比较相关推荐

  1. 传递数组_Fortran:派生数组与数组传递进子程序耗费时间比较

    在优化程序的过程中发现其中存在大量的派生类型变量(type),同时发现Fortran子程序可以接受type类型数组中元素,即将type类型中元素当作独立的数组传递.传递过程如下所示: ... type ...

  2. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  3. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组

    1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...

  4. php数组地址,怎么实现javascript数组与php数组的地址传递

    怎么实现javascript数组与php数组的地址传递 发布时间:2020-12-10 15:31:30 来源:亿速云 阅读:56 作者:Leah 怎么实现javascript数组与php数组的地址传 ...

  5. java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案

    很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...

  6. python2.7下面字节数组(ByteArray)和16进制字符串(HexString)转化

    由于是python2.7 严谨起见,文中不使用字符串的说法,下面只使用str或者unicode的说法 之所以有这个需要,是因为: Hmac-sha1加密在网上计算的结果是HexString,也就是16 ...

  7. java 16进制数组 字符串_byte数组转换成16进制字符串和字符数组的方法

    byte数组转换成16进制字符串String: public class CommonUtil { /** * byte数组转换成16进制字符串 * @param src * @return */ p ...

  8. 数组,数组的定义,数组的注意事项

    版权声明:转载请附上文章地址https://blog.csdn.net/qq_42672839 数组 数组的概念:是一种容器,可以同时存放多个数据值. 数组的特点: 1. 数组是一种引用数据类型 2. ...

  9. C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转

    目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...

最新文章

  1. 连接mysql的机制_安装成功后mysql 8.0不能连接navicat的解决方法
  2. mysql导出数据字典6_MySQL利用Navicat导出数据字典
  3. 垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?
  4. python物理模拟_在Python游戏中模拟重力【Programming(Python)】
  5. C#datagidview创立数据库,实现读写数据视频
  6. 数组 -- 13.2 Maximum Subarray --图解
  7. select2 清除已选项
  8. Struts2的标签库(一)之控制标签
  9. c语言编程中分数怎么表示,用C语言编程平均分数
  10. Java 开发微信公众号(订阅号)
  11. 计算机名(主机名)、本机地址(IP/IPv4)、localhost、127.0.0.1的关系
  12. 未来计算机专业会怎么样
  13. 达梦数据库查询模式名,表名,字段名
  14. RGB-D、TOF深度相机的原理
  15. c语言清除文件缓存区,C语言之清空缓存区
  16. 自闭症青年的突显网络、默认模式网络和中央执行网络功能连接的差异
  17. 职场上,不知道这些,活该工资比人低一倍
  18. 与某流氓网站的血泪交战史
  19. VB TreeView控件(精品建议收藏)
  20. bzoj3252 攻略 dfs序+线段树

热门文章

  1. charles 手机抓包设置
  2. springboot思维导图
  3. 洛谷——P1090 合并果子
  4. 洛谷——P1781 宇宙总统
  5. 正式突破两千粉丝!开心!
  6. Kubernetes——基本概念与理论
  7. c语言两个变量相乘出现乱码,C语言,矩阵的乘法运算程序,输出一堆乱码,求大神看看哪里错了。。...
  8. shell脚本详解(十)——sed编辑器的使用方法
  9. oracle12c完全卸载工具_oracle完全卸载方法
  10. matlab如何使音频文件声音变大_如何制作视频课程