计算机内存相关知识总结

计算机内存

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

软件层面:栈(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):缓存进行数据管理的最小单元。
    • 容量计算:整个缓存容量 = 组数 × 路数 × 缓存块大小。

程序局部性原理

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

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

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

相关推荐
野生技术架构师16 小时前
Redis 和 MySQL 如何保证数据一致性?先更新数据库还是先删缓存,延迟双删、MQ、Canal 一次讲透
数据库·redis·缓存
愈努力俞幸运17 小时前
token,context window,top_p,temperature,skill,Harness Engineering
数据库·redis·缓存
Patrick在香港18 小时前
Claude API 成本直降90%:Prompt Caching 提示词缓存 Python 实战
python·缓存·prompt
NeilYuen2 天前
【vemory】高性能KV存储AOF方案设计
linux·c++·redis·缓存
LuminousCPP2 天前
数据结构基础篇(二):顺序表与链表全方位对比|从内存布局到 CPU 缓存理解底层差异
c语言·数据结构·经验分享·链表·缓存
spter。2 天前
Redis 与 Single-flight 的分工与协作
数据库·redis·缓存
清水白石0082 天前
Python 如何设计一个线程安全的缓存?从锁策略、LRU 到工程化实战
python·安全·缓存
小宋10212 天前
大模型应用如何控制成本与延迟:Token、缓存、流式和降级实战
人工智能·缓存
番茄炒鸡蛋加糖2 天前
项目技术点总结--四大核心技术+缓存
缓存
大飞记Python2 天前
AI大模型Token计费全解析:输入/输出、缓存命中、阶梯计价一文看懂
人工智能·缓存