• 内存的读写过程、现实模型及指针


    目录

    一、内存的读写过程

    二、内存的现实模型

    三、指针


    一、内存的读写过程

    内存IC进行数据写入和读取的模型:

    ba701e2c3a5f48649d287fddf9b888f5.png

    假设我们要向内存IC中写入1byte的数据的话,它的过程是这样的:

    ● 首先给VCC接通 +5V的电源,给GND接通 0V的电源,使用A0-A9来指定数据存储场所,然后再把数据的值输入给D0-D7的数据信号,并把WR(write)的值置为1,执行完这些操作后,既可以向内存IC写数据

    ● 读出数据时,只需要通过A0-A9地址信号指定数据的存储场所,然后再将RD的值置为1即可

    ● 图中的RD和WR又被称为控制信号,其中当WR和RD都为0时,无法进行写入和读取操作 

    二、内存的现实模型

    为了便于记忆,可以把内存模型映射成为我们现实世界的模型,在现实世界中,内存的模型很像我们生活的楼房,在这个楼房中,1层可以存储一个字节的数据,楼层号就是地址,下面式内存和楼层整合的模型图:

    1KB内存模型图:

    deeecc83aa7e4611af9ce37a707e53fe.png

     程序中的数据不仅仅只有数值,还有数据类型的概念,从内存上来看,就是占用内存大小(占用楼层数)的意思,即使物理上强制以1个字节为单位来逐一读写数据的内存,在程序中,通过指定数据类型,也能实现以特定字节数为单位来进行读写。

    下面式一个以特定字节数为例来读写指令字节的程序的示例:

    1. //定义变量
    2. char a;
    3. char b;
    4. char c;
    5. //变量赋值
    6. a=123;
    7. b=123;
    8. c=123;

    通过分别声明了三个变量abc,并给每个变量赋上相同的123,这三个变量表示内存的特定区域。通过变量,即使不指定物理地址,也可以直接完成读写操作,操作系统会自动为变量分配内存地址。

    这三个变量分别表示1个字节长度的char,2个字节长度的short,表示4个字节的long,因此,虽然数据都表示的是123,但是其存储时所占的内存大小是不一样的。如下所示:

    变量存储示意图:

    220c7cb1a9104aadb7ed2bef9305e0f1.png

    这里的123都没有超过每个类型的最大长度,所以short和long类型为多占用的其他内存空间分配的数值是0,这里我们采用的是低字节序列的方式存储

    低字节序列:将数据低位存储在内存低位地址

    高字节序列:将数据的高位存储在内存低位的方式称为高字节序列

    三、指针

    指针是C语言非常重要的特征,指针也是一种变量,只不过它所表示的不是数据的值,而是内存的地址。通过使用指针,可以对任意内存地址的数据进行读写

    在了解指针读写的过程前,我们需要了解如何定义一个指针,和普通的变量不同,在定义指针时,我们通常会在变量名前加一个 * 号,例如我们可以在指针定义如下的变量:

    1. char *d;//char类型的指针d定义
    2. short *e;//short类型的指针e定义
    3. long *f;//long类型的指针f定义

    以32位计算机为例,32位计算机的内存地址是4字节,在这种情况下,指针的长度也是32位,然而,变量def却代表了不同字节长度。

    实际上,这些数据表示的是从内存中一次读取的字节数,比如def的值都为100,那么使用char类型时就能够从内存中读写1byte的数据,使用short类型就能够从内存读写2字节的数据,使用long就能够读写4字节的数据,下面式一个完整的类型字节表:

    类型32位64位
    char11
    short int22
    int44
    unsigned int44
    float44
    double88
    long48
    long long88
    unsigned long48

    数据类型读写长度示意图:

    5dafb1303fb04e8ba2cb853585dec10c.png

     

  • 相关阅读:
    day09_数组进阶
    求求你别在用SpringMVC了,太Low了,Spring又官宣了一个更牛逼的替代框架
    Java 字节与进制转换
    unity打AB包,AssetBundle预制体与图集(二)
    Java 8的18个常用日期处理
    Fluent瞬态结果的时间统计处理
    【区分vue2和vue3下的element UI Message 消息提示组件,分别详细介绍属性,事件,方法如何使用,并举例】
    Go 语言搭建个人博客(qiucode.cn 重构篇 一)
    PCL 点云镜像变换
    5.Vue中的计算属性(compute)监视属性(watch),二者优点和对比
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/127123956