首页 > 其他分享 >计算机系统基础----特殊类型(数组,结构体 ,联合体)的分配

计算机系统基础----特殊类型(数组,结构体 ,联合体)的分配

时间:2023-05-05 22:34:01浏览次数:37  
标签:计算机系统 00 字节 int 联合体 ---- 数组 数据 指针

《数组》

  《数组的分配与访问》

  首先我们要知道在8086中内存的结构如图:

   可见一个单元格有8bit(1B)

   对于指针类型数据占4字节,char占1个字节,int 占 4个字节,short 占2个字节,double 占8个字节

   当我们访问数组中的数据时是要访存的,当要访存时,我们只知道数组的首地址和数据下标i

 

  那么我们如何寻找在内存中我们所需要的数据呢?

  如图所示,这里我想要强调的是:

  假设一个int 型的数组,知道首地址为0100H ,那么 [1] 中的数据在哪个地址?

  0100H + 1 * 4(注意要转化为16进制) = 0104H

 

  《在静态区中的分配》

 

 因为buf数组定义在外面,则在编译后其在数据段中,而不在堆栈

通过反汇编可以知道buf 在数据段中的地址:08048908

其后为数组中的数据:

因为int 占 4B 即 32位,则可以知道 0A 00 00 00 为 10的数据表示

因为一个内存中的单元格有8位(一个字节),所以这里8位8位地一个分开,

所以有 0A 00 00 00 这样

因为其是小端模式,则真正看的话是: 00 00 00 0A

    

 

    《在堆栈中的分配》

 

 

  《数组与指针的关系》

 定义int a[]

注意:我们平时中写代码中对指针 的+1 操作在编译过后会解释成 + 1* (指针指向的数据的大小)

如 int * ptr; ptr+=1

那么其实是: add $4,ptr

 

还有:

  我们在A[0],A[i].....等操作都是要访存的,用mov指令

  而*(xxx) 操作是要取地址,用lea指令

 

《多维数组与指针数组的关系》

 我们来分析一下:

  通过:

  我们可以看到其实二维数组中也是直接保存了数据

  再通过:

其实二维数组 int num[][] 中的第一维相当于 int * num[],即指针数组

 

这个时候会想:指针数组中岂不是每一个元素都指向一个数据的地址吗?

咋指针数组还可以指向一个数组呢?

 

对的,指针指向了数组中第一个元素的地址

然后其他的数据需要下标来确定,没有下标,指针还真就是只能指向一个数据的地址

这也就是为什么我们在定义二维数组时可以定义为 int arr[][n] ,而不能是 int arr[n][]

其中的n就是用来判断这个一个指针中指向的数组,到底有多少个元素

 

标签:计算机系统,00,字节,int,联合体,----,数组,数据,指针
From: https://www.cnblogs.com/cilinmengye/p/17375540.html

相关文章

  • 汇总
    作业链接Alpha阶段项目复审链接事后诸葛亮分析链接......
  • 2023 5 5
    #include<iostream>#include<iomanip>usingnamespacestd;intmain(){inta;cout<<"请输入a:";cin>>a;cout<<"十进制:"<<dec<<a<<endl;cout<<"十六进制......
  • 数形结合解决碰撞问题
    数形结合巧妙解决碰撞问题笔者在做题时遇到了如下习题: 于是代入弹性碰撞和非弹性碰撞的公式,做出B的速度分别是4.8m/s和2.4m/s,于是碰撞过后B的速度应该在2.4-4.8m/s之间,于是答案为B 可是为什么弹性碰撞速度就最大,而非弹性碰撞速度就最小呢?可以想象AB间有一根弹簧,弹性碰撞时,......
  • kettle从入门到精通 第十七课 kettle Transformation executor
    Transformationexecutor步骤是一个流程控件,和映射控件类似却又不一样。1、子转换需要配合使用从结果获取记录和复制记录到结果两个步骤,而子映射需要配合映射输入规范和映射输出规范使用。如下子转换实现的功能是计算x+y的值 2、从结果获取记录1)步骤名称:自定义2)字段:设置从......
  • 云原生时代崛起的编程语言Go常用标准库实战
    @目录基础标准库简述字符串-string底层结构函数长度格式化输出模版-templatetext/templatehtml/template正则表达式-regexp编码-encodingBase64JSONXML时间-time网络-netURLHTTP客户端和服务端加密IO操作读写文件环境变量命令行数据库排序-sort测试和基准测试基础标准库简述Go......
  • 负载均衡的几种常用方案
    RoundRobin轮询调度随机方式哈希方式一致性哈希根据键的范围来负载根据键对服务器结点数取模来负载;纯动态结点负载均衡不用主动负载均衡;相关开源工具负载均衡的几种常用方案总结下负载均衡的常用方案及适用场景;RoundRobin轮询调度以轮询的方式依次请求调度不同的服务器; 实现......
  • 全局事务与本地事务的区别应用
    全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA二阶段提交协议与“企业信息系统”(EIS)或数据库进行交互。 本地事务:在单个EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。 在Hibernate配置文件中有这么两......
  • 数据库事务
    数据库事务(一)概述数据库事务(DatabaseTransaction),是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应......
  • Jboss4集群配置之二:Jboss集群配置实例与负载均衡器配置
    1.前言 2.集群准备知识 3.Jboss集群配置实例概述4.Jboss集群负载均衡器mod_jk配置3.Jboss集群配置实例概述下文中,RubySun 将以实例来叙述Jboss集群配置。该实例包含3个Jboss节点。各节点被动接收负载均衡器转发的请求。各节点间没有横向的联系。4. Jboss集群负载均衡器配置步......
  • Photoshop学习
        Photoshop基础教程:图层全面解析 PS图层蒙版_技巧教程 PS图层合并并同时保留原样式_技巧教程ps图层合并(图片合成)_技巧教程 ps图层智能对象_作用图解PS图层智能对象_10个特性介绍ps图层转换为智能对象使用介绍和方法PS智能对象的图片不能编辑的两种解决办法PS智能对象......