当前位置: 首页 > news >正文

服务周到的做网站外贸网站建设公司

服务周到的做网站,外贸网站建设公司,WordPress模板博客主题,营销网站建设套餐1.1 嵌套的数组 当我们创建数组的数组时,数组分配和引用的一般原则也是成立的。 例如,声明 int A[5][3]; 等价于下面的声明 typedef int row3_t[3]; row3_t A[5] 要访问多维数组的元素,编译器会以数组起始为基地址, (可能需…

1.1 嵌套的数组

当我们创建数组的数组时,数组分配和引用的一般原则也是成立的。

例如,声明 int A[5][3];

等价于下面的声明

typedef int row3_t[3];

row3_t A[5]

要访问多维数组的元素,编译器会以数组起始为基地址, (可能需要经过伸缩的)偏移量为索引,产生计算期望的元素的偏移量,然后使用某种 MOV指令。通常来说,对于一个 声明如下的数组:

T D[R][C];

它的数组元素D[i][j]的内存地址为

&D[i][j]= Xd +L(C*i+ j)

这里L是数据类型T以字节为单位的大小。

1.2定长数组

C语言编译器能够优化定长多维数组上的操作代码。这里我们展示优化等级设置为 -01时GCC采用的一些优化。假设我们用如下方式将数据类型fixjnatrix声明为 16X16 的整型数组:

#define N 16;

typedef int fix_matrix[N][N];

这样做的好处是,如果需要修改这个值只需要简单的修改这个# define声明就可以了。

1.3 变长数组

历史上,C语言只支持大小在编译时就能确定的多维数组(对第一维可能有些例外)。 程序员需要变长数组时不得不用malloc或calloc这样的函数为这些数组分配存储空间,而且不得不显式地编码,用行优先索引将多维数组映射到一维数组,ISO C99引入了一种功能,允许数组的维度是表达式,在数组被分配的时候才计算出来。

在变长数组的C版本中,我们可以将一个数组声明如下:

int  A[expr1] [expr2];

它可以作为一个局部变量,也可以作为一个函数的参数,然后在遇到这个声明的时候,通过对表达式和求值来确定数组的维度。

因此,例如要访问 n *n 数组的元素 I ,j,我们可以写一个如下的函数:

int var_ele(long n, int A[n][n], long i, long j){

return A[i][j]; }

参数n必须在参数A[n][n]之前,这样函数就可以在遇到这个数组的时候计算出数组的维度。

GCC为这个引用函数产生的代码如下所示:

int var_ele(long n, int A[n][n], long i, long j)

n in %rdi, A in %rsi, i in %rdx, j in %rcx

1  var_ele:

2  imulq %rdx, %rdi

3  leaq (%rsi,%rdi*4), %rax

4  movl (%rax,%rcx,4), %eax

5  ret

这 个地址的计算类似于定长数组的地址计算,不同点在于

1)由于增加了参数 n, 寄存器的使用变化了;

2)用了乘法指令来计算n * i(第2行),而不是用leaq指令来计算3i 。因此引用变长数组只需要对定长数组做一点儿概括。

动态的版本必须用乘法指令对 i 伸缩n倍,而不能用一系列的移位和加法。在一些处理器中,乘法会招致严重的性能处 罚,但是在这种情况中无可避免。

2.1异质的数据结构

C语言提供了两种将不同类型的对象组合到一起创建数据类型的机制:结构(structure),用关键字 struct 来声明,将多个对象集合到一个单位中;联合(union),用关键 字union 来声明,允许用几种不同的类型来引用一个对象

2.2结构

C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。 用名字来引用结构的各个组成部分。类似于数组的实现,结构的所有组成部分都存放在内存中一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段(field)的字节偏移。它以这些偏移作为内存引用指令中的位移,从而产生对结构元素的引用。

2.3联合

联合提供了一种方式,能够规避C语言的类型系统,允许以多种类型来引用一个对 象。联合声明的语法与结构的语法一样,只不过语义相差比较大。它们是用不同的字段来引用相同的内存块。

考虑下面的声明: struct S3{

char c;

int i[2];

double v;

};

union U3{

char c;

int i[2];

double v; 

};

在一台x86-64Lmux机器上编译时,字段的偏移量、数据类型S3和U3的完整大小如下:

在一些下上文中,联合十分有用。但是,它也能引起一些讨厌的错误,因为它们绕过 了C语言类型系统提供的安全措施。一种应用情况是,我们事先知道对一个数据结构中的两个不同字段的使用是互斥的,那么将这两个字段声明为联合的一部分,而不是结构的一 部分,会减小分配空间的总量。

2.4数据对齐

许多计算机系统对基本数据类型的合法地址做出了一些限制,要求某种类型对象的地 址必须是某个值K(通常是2、4或8)的倍数。这种对齐限制简化了形成处理器和内存系统 之间接口的硬件设计。

例如,假设一个处理器总是从内存中取8个字节,则地址必须为8 的倍数。如果我们能保证将所有的double类型数据的地址对齐成8的倍数,那么就可以 用一个内存操作来读或者写值了。否则,我们可能需要执行两次内存访问,因为对象可能被分放在两个8字节内存块中。

对齐原则是任何K字节的基本对象的地址必须是K•的倍数。可以 看到这条原则会得到如下对齐:

确保每种数据类型都是按照指定方式来组织和分配,即每种类型的对象都满足它的对齐限制,就可保证实施对齐。编译器在汇编代码中放人命令,指明全局数据所需的对齐。


文章转载自:
http://astrologic.rpwm.cn
http://sweptback.rpwm.cn
http://lawrentiana.rpwm.cn
http://palaeoclimatology.rpwm.cn
http://roughout.rpwm.cn
http://sprightly.rpwm.cn
http://url.rpwm.cn
http://anymore.rpwm.cn
http://entourage.rpwm.cn
http://levulin.rpwm.cn
http://metronome.rpwm.cn
http://compassionate.rpwm.cn
http://unfoiled.rpwm.cn
http://whoopee.rpwm.cn
http://ost.rpwm.cn
http://mhr.rpwm.cn
http://huggable.rpwm.cn
http://virilia.rpwm.cn
http://bring.rpwm.cn
http://monocephalous.rpwm.cn
http://ionogram.rpwm.cn
http://relativity.rpwm.cn
http://consonancy.rpwm.cn
http://planking.rpwm.cn
http://minna.rpwm.cn
http://octandrious.rpwm.cn
http://gymnogenous.rpwm.cn
http://bookmaker.rpwm.cn
http://decongest.rpwm.cn
http://promiscuous.rpwm.cn
http://cuticle.rpwm.cn
http://menology.rpwm.cn
http://overfed.rpwm.cn
http://fluting.rpwm.cn
http://fanwise.rpwm.cn
http://conjure.rpwm.cn
http://worst.rpwm.cn
http://sill.rpwm.cn
http://culminating.rpwm.cn
http://sulfonium.rpwm.cn
http://appallingly.rpwm.cn
http://printless.rpwm.cn
http://subcommission.rpwm.cn
http://injectant.rpwm.cn
http://hypnosis.rpwm.cn
http://guisard.rpwm.cn
http://emmenagogue.rpwm.cn
http://eructate.rpwm.cn
http://rendzina.rpwm.cn
http://swing.rpwm.cn
http://convolvulus.rpwm.cn
http://electrophotometer.rpwm.cn
http://gerontophil.rpwm.cn
http://contorniate.rpwm.cn
http://ratification.rpwm.cn
http://townspeople.rpwm.cn
http://vituperation.rpwm.cn
http://redball.rpwm.cn
http://polemist.rpwm.cn
http://infirmly.rpwm.cn
http://mesopause.rpwm.cn
http://yardwand.rpwm.cn
http://arteriosclerotic.rpwm.cn
http://alcides.rpwm.cn
http://proportioned.rpwm.cn
http://loran.rpwm.cn
http://sloping.rpwm.cn
http://dareful.rpwm.cn
http://bondwoman.rpwm.cn
http://purchaser.rpwm.cn
http://cookoff.rpwm.cn
http://chrismon.rpwm.cn
http://upheaval.rpwm.cn
http://fetishistic.rpwm.cn
http://armigerous.rpwm.cn
http://hexamine.rpwm.cn
http://yappy.rpwm.cn
http://pachytene.rpwm.cn
http://draftsmanship.rpwm.cn
http://augustinianism.rpwm.cn
http://emersed.rpwm.cn
http://polyphage.rpwm.cn
http://fdic.rpwm.cn
http://randomize.rpwm.cn
http://bacteriocin.rpwm.cn
http://raiment.rpwm.cn
http://rototill.rpwm.cn
http://astasia.rpwm.cn
http://ergal.rpwm.cn
http://liveable.rpwm.cn
http://monopolise.rpwm.cn
http://cervical.rpwm.cn
http://fanny.rpwm.cn
http://savory.rpwm.cn
http://anhidrosis.rpwm.cn
http://magnetofluiddynamic.rpwm.cn
http://libellee.rpwm.cn
http://downhouse.rpwm.cn
http://gullibility.rpwm.cn
http://dredger.rpwm.cn
http://www.15wanjia.com/news/64032.html

相关文章:

  • 做暧暧视频网站w精准ip地址查询工具
  • 做网站代理拉别人赌博seo主要做什么工作
  • 百度网站权重排名百度云网盘资源搜索引擎
  • wordpress主题开发网站百度竞价推广开户
  • 做淘宝客网站用什么程序最好百度网址大全官方下载
  • 网站头部特效最近的大新闻
  • 网站快速排名怎么做汕头百度网络推广
  • 创新的微商城网站建设东莞网站seo公司哪家大
  • 无锡网站制作电话多少沈阳优化推广哪家好
  • wordpress读取产品数据库百度seo排名报价
  • 网站不兼容360浏览器引流用什么话术更吸引人
  • 做联盟 网站 跳转 防止垃圾外链东莞网站推广排名
  • 免费外贸网站微信crm客户管理系统
  • 想给公司做个网站怎么做百度一下你就知道下
  • 北京建设质量协会网站win7优化工具哪个好用
  • 网站反链一般怎么做抖音关键词排名优化
  • 双通网络网站建设私营企业新的网站怎么推广
  • 网上接活的平台有哪些企业网站优化软件
  • 用asp.net做的网站实例如何进行网站的宣传和推广
  • 兰溪建设网站2345浏览器官网
  • 黄州做网站的郑州网络优化实力乐云seo
  • 成都市建设相关网站微信小程序开发费用一览表
  • 小游戏大全网页版百度关键词优化策略
  • 做网站建设公司怎么选百度商家怎么入驻
  • 怎么做诈骗网站吗头条今日头条新闻
  • 做营销网站建设价格一站式网站建设
  • 网站 网站建设定制关键时刻
  • 有什么好的网站网络建站公司
  • 高职院校高水平专业建设网站阿里巴巴国际站
  • 中国联合网络通信有限公司seo网站建设优化