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

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

一、内存的读写过程


内存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


目录
相关文章
|
4月前
|
程序员 编译器 C++
【C++核心】C++内存分区模型分析
这篇文章详细解释了C++程序执行时内存的四个区域:代码区、全局区、栈区和堆区,以及如何在这些区域中分配和释放内存。
67 2
|
1月前
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
70 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
|
5月前
|
存储 C语言
指针和动态内存分配
指针和动态内存分配
113 0
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
216 13
|
2月前
|
存储 C语言 开发者
C 语言指针与内存管理
C语言中的指针与内存管理是编程的核心概念。指针用于存储变量的内存地址,实现数据的间接访问和操作;内存管理涉及动态分配(如malloc、free函数)和释放内存,确保程序高效运行并避免内存泄漏。掌握这两者对于编写高质量的C语言程序至关重要。
76 11
|
2月前
|
存储 算法 程序员
C 语言指针详解 —— 内存操控的魔法棒
《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
2月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
199 4
|
3月前
|
机器学习/深度学习 算法 物联网
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
本文介绍了两种大模型微调方法——LoRA(低秩适应)和PPO(近端策略优化)。LoRA通过引入低秩矩阵微调部分权重,适合资源受限环境,具有资源节省和训练速度快的优势,适用于监督学习和简单交互场景。PPO基于策略优化,适合需要用户交互反馈的场景,能够适应复杂反馈并动态调整策略,适用于强化学习和复杂用户交互。文章还对比了两者的资源消耗和适用数据规模,帮助读者根据具体需求选择最合适的微调策略。
1029 5