博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)Fortran、matlab 和 C语言中数组的存储方式
阅读量:6636 次
发布时间:2019-06-25

本文共 1577 字,大约阅读时间需要 5 分钟。

  Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。

例如二维数组Amn

转Fortran、matlab 和 C语言中数组的存储方式

 

(1)行优先顺序
     将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。
  【例】二维数组Amn的按行优先存储的线性序列为:
                a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
        行优先顺序推广到多维数组,可规定为先排最右的下标。       

        二维数组Amn地址计算公式(数组存储结构以C语言下标表示):

        LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d   

    ①LOC(a11)是开始结点的存放地址(即基地址)

  ②d为每个元素所占的存储单元数

(2)列优先顺序

     将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。
  【例】二维数组Amn的按列优先存储的线性序列为:
                 a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
        列优先顺序推广到多维数组,可规定为先排最左的下标。       

        二维数组Amn地址计算公式(数组存储结构以C语言下标表示):

        LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d

下面是用c语言测试存储方式对计算效率的影响

Program1. 不按计算机规定的存储方式编程

#include "stdio.h"

#include "stdlib.h"
#include "time.h"

void main ()

{ int i,j;

 float a[1000][5000];
 clock_t beg, end;
 double time;
 beg=clock();

 for (i=0; i<1000; i++) {

  for (j=0; j<5000; j++) {
   a[i][j]=0.5;  }

 for (j=0; j<5000; j++) {

  for (i=0; i<1000; i++) {
   a[i][j]=a[i][j]*a[i][j]+2.0*a[i][j]+10.0;  }

    end=clock();

 time=(double)(end-beg)/CLOCKS_PER_SEC;
 printf("Compute time is %f seconds\n",time);

}

Compute time is 0.063000 seconds

Program2.按计算机规定的存储方式编程

#include "stdio.h"

#include "stdlib.h"
#include "time.h"

void main ()

{ int i,j;

 float a[1000][5000];
 clock_t beg, end;
 double time;
 beg=clock();

 for (i=0; i<1000; i++) {

  for (j=0; j<5000; j++) {
   a[i][j]=0.5;  }

 for (i=0; i<1000; i++) {

  for (j=0; j<5000; j++) {
   a[i][j]=a[i][j]*a[i][j]+2.0*a[i][j]+10.0;  }

    end=clock();

 time=(double)(end-beg)/CLOCKS_PER_SEC;
 printf("Compute time is %f seconds\n",time);

}

Compute time is 0.046000 seconds

转载于:https://www.cnblogs.com/milier-otw/archive/2013/01/21/2870577.html

你可能感兴趣的文章
快速更新package.json文件
查看>>
Windows Azure 微软公有云体验(三) IIS中文编码解决方案
查看>>
神剧制作《黑镜》第四季基本剧情,良心制作
查看>>
poj2182 Lost Cows (线段树)
查看>>
Hadoop从2.2.0到2.7
查看>>
利用maven将jar包添加到本地仓库中
查看>>
Python基本数据类型(字典)
查看>>
The next day to learn English
查看>>
VS2017编译Qt x64
查看>>
Android中检测网络连接状况的方法
查看>>
可扩展标记语言XML
查看>>
github使用及代码同步
查看>>
adblock广告过滤
查看>>
Css gray 无法覆盖IE10
查看>>
Linux 脚本编写基础
查看>>
.NET设计模式(15):结构型模式专题总结(转)
查看>>
mysql分表的3种方法(转)
查看>>
WCF RIA Services使用详解(转载)
查看>>
TabActivity与Activity之间的动画跳转(主要Tabhost中跳转出来的动画效果解决)
查看>>
MySql 密码过期
查看>>