计算机内存相关知识总结

计算机内存

计算机内存系统核心知识总结

软件层面:栈(Stack)

内存布局

  • 栈在高地址,向下增长:在进程的虚拟地址空间中,栈通常位于高地址区域,并随着数据压入而向低地址方向增长。

栈帧(Stack Frame)

  • 本质:栈帧本质上是一个函数的活动记录,用于存储函数的局部变量、参数、返回地址等信息。
  • 栈溢出防护 :
    • 代码层面 :使用安全的字符串函数,如 strncpy 替代 strcpy,避免缓冲区溢出。
    • 编译器层面 :GCC 默认开启 -fstack-protector 选项,在函数栈中插入保护字(canary)来检测栈溢出攻击。

硬件层面:存储层次结构

核心组件

  1. 寄存器(Registers):CPU 内部的速度最快的存储单元。
  2. 缓存(Cache):位于 CPU 和主存之间的高速缓冲存储器。
  3. 主存(Main Memory / RAM):程序运行时存放代码和数据的主要场所。

存储器分类

存储器主要分为两大类:

类型 全称 特点 典型应用
ROM 只读存储器(Read-Only Memory) 内容通常只能读取,不能随意写入。 存储固件、BIOS
RAM 随机存取存储器(Random Access Memory) 可读可写,断电后数据丢失。 用作系统主内存
ROM 的发展
  • 早期:紫外线可擦除(EPROM),但擦除次数有限。
  • 后期:电可擦除可编程只读存储器(EEPROM),可多次擦写。
RAM 的分类
类型 全称 特点 典型应用
SRAM 静态随机存取存储器(Static RAM) 速度快、造价高、不需要刷新。 CPU 内部的高速缓存(L1, L2, L3)
DRAM 动态随机存取存储器(Dynamic RAM) 速度相对慢、造价低、需要定期刷新。 内存条(主内存)

缓存(Cache)

  • 作用:缓存是处理器和主内存之间的高速桥梁,用于弥补 CPU 高速与内存低速之间的差距。
  • 层级 :通常为多层结构,如 L1、L2、L3 缓存,速度逐级降低,容量逐级增大。L1分指令缓存和数据缓存,L1存取速度4个cpu时钟周期,L2 11个,L3 39个 RAM内存的存取速度107个 L1大部分32KB 一个cache line为64Bytes 共有512条cache line 如果有8组 则每一路有64*64=4096Byts .为方便索引内存地址Tag:每条 Cache Line 前都会有一个独立分配的 24 bits来存的 tag,其就是内存地址的前24bits
    • Index:内存地址后续的6个bits则是在这一Way的是Cache Line 索引,2^6 = 64 刚好可以索引64条Cache Line
    • Offset:再往后的6bits用于表示在Cache Line 里的偏移量https://coolshell.cn/articles/20793.html
  • 管理单元 :
    • 缓存块(Cache Block / Cache Line):缓存进行数据管理的最小单元。
    • 容量计算:整个缓存容量 = 组数 × 路数 × 缓存块大小。

程序局部性原理

缓存设计基于以下两个关键的局部性原理:

原理 定义 对缓存设计的启示
时间局部性 被访问过一次的内存位置,在短时间内很可能再次被访问。 将最近访问过的数据保留在缓存中。
空间局部性 被访问过的某个内存位置附近的位置,不久后也大概率会被访问。 缓存加载数据时,会一次性加载一个缓存块(包含目标地址及其相邻数据)。

结论:正是基于程序访问内存所表现出的这些规律性(局部性),计算机系统才设计了多级缓存结构,从而显著提升了程序的整体执行效率。

相关推荐
ShineWinsu1 小时前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
Wang's Blog3 小时前
Java 项目实战: 外卖平台优化-使用Redis作为缓存产品与TTL配置
java·redis·缓存
分布式存储与RustFS5 小时前
AI 训练大文件 Range 读爆炸?RustFS 前面挂一层 Cachey
缓存·云原生·开源·对象存储·分布式存储·ai训练·s3
RISCV_Explorer6 小时前
技术指南:从总线协议到软件可见行为——RISC-V 多核缓存一致性的 Linux 实践
linux·缓存·risc-v
小羊没烦恼!6 小时前
【译】利用Asp.net MVC处理文件的上传下载
开发语言·缓存·c#·word·powerpoint·.net
ShineWinsu6 小时前
对于Redis:Redis特性以及应用场景的解析
linux·c++·redis·缓存·高并发·分布式系统·key-value
Eloudy8 小时前
NVSwitch 和 UALink 的数据(缓存)一致性
网络·缓存·gpu
程序猿乐锅16 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
阿狗童鞋17 小时前
Redis实战指南
数据库·redis·缓存
程序猿乐锅1 天前
一文讲透缓存穿透、击穿和雪崩
java·redis·spring·缓存·mybatis