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

简介: 内存的读写过程、现实模型及指针

一、内存的读写过程


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



假设我们要向内存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内存模型图:



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


//定义变量
char a;
char b;
char c;
//变量赋值
a=123;
b=123;
c=123;


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


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


变量存储示意图:



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


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


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


三、指针


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


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


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


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


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


类型 32位 64位
char 1 1
short int 2 2
int 4 4
unsigned int 4 4
float 4 4
double 8 8
long 4 8
long long 8 8
unsigned long 4 8


目录
相关文章
|
3月前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
56 2
|
11天前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
57 12
|
4月前
|
存储 C语言
指针和动态内存分配
指针和动态内存分配
95 0
|
19天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
45 4
|
2月前
|
机器学习/深度学习 算法 物联网
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
本文介绍了两种大模型微调方法——LoRA(低秩适应)和PPO(近端策略优化)。LoRA通过引入低秩矩阵微调部分权重,适合资源受限环境,具有资源节省和训练速度快的优势,适用于监督学习和简单交互场景。PPO基于策略优化,适合需要用户交互反馈的场景,能够适应复杂反馈并动态调整策略,适用于强化学习和复杂用户交互。文章还对比了两者的资源消耗和适用数据规模,帮助读者根据具体需求选择最合适的微调策略。
160 5
|
2月前
|
存储 Rust C#
内存指针解引用
【10月更文挑战第14天】
33 1
|
6月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
86 0
|
2月前
|
C++
析构造函数就是为了释放内存,就是在局部指针消失前释放内存,拷贝构造函数就是以构造函数为模块,在堆里面新开一块,同一个变量在堆里面的地址
本文讨论了C++中构造函数和析构函数的作用,特别是它们在管理动态内存分配和释放中的重要性,以及如何正确地实现拷贝构造函数以避免内存泄漏。
38 2
|
4月前
|
机器学习/深度学习 数据采集 PyTorch
构建高效 PyTorch 模型:内存管理和优化技巧
【8月更文第27天】PyTorch 是一个强大的深度学习框架,被广泛用于构建复杂的神经网络模型。然而,在处理大规模数据集或使用高性能 GPU 进行训练时,有效的内存管理对于提升模型训练效率至关重要。本文将探讨如何在 PyTorch 中有效地管理内存,并提供一些优化技巧及代码示例。
184 1
|
4月前
|
easyexcel Java 关系型数据库
阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel
该文章主要介绍了在Java应用中如何使用EasyExcel技术完成对Excel文件的导入和导出操作,包括环境搭建、基本概念、快速入门、进阶操作和综合应用等内容,并提供了相关代码示例和注意事项。
 阿里巴巴-EasyExcel 基于Java的简单、省内存的读写Excel

相关实验场景

更多