Win32核心编程 读书笔记三 高速缓存行

发布时间:2026/10/9 4:48:15

Win32核心编程 读书笔记三 高速缓存行 是做一个整天If else的码农还是做一个real coder区别就在于后者掌握更多的基础原理和细节实现能力。高速缓存行的使用优化是正对多CPU而言的但是如今还有什么东西不是多CPU了呢。当一个C P U从内存读取一个字节时它不只是取出一个字节它要取出足够的字节来填入高速缓存行。高速缓存行由3 2或6 4个字节组成视C P U而定并且始终在第3 2个字节或第6 4个字节的边界上对齐。高速缓存行的作用是为了提高C P U运行的性能。通常情况下应用程序只能对一组相邻的字节进行处理。如果这些字节在高速缓存中那么C P U就不必访问内存总线而访问内存总线需要多得多的时间。注很显然CPU从内存取数据是一个物理行为取的字数不受软件控制的。注所以我们最好把同一时间需要读写的数据放在同一个缓存行中避免频繁的更新高速缓存行在多CPU系统中数据的同步也是个问题。如果一个数据每个CPU的高速缓存都存有该数据的副本如果一个CPU改变了该值那么就会出现一个问题其他的CPU哪怕没有用该数据也要重新读取缓存行。所以我们要尽量避免不相关的数据在一起。原书中的例子现场好的描述了这个问题我在稍加注释贴出来糟糕的代码方式 我们大部分新手都是这么写的吧哈哈struct CUSTINFO { DWORD dwCustomerID; //Mostly read-only int nBalanceDue; //Read-write char szName[100]; //Mostly read-only FILETIME ftLastOrderDate; //Read-write };上面只读的数据和读写的数据交错排序。上文说了不相关的数据不放一起只读的数据和读写数据也不放在一起为了一个读写数据的改变而频繁的读取只读数据是不划算的。优秀的代码#ifdef _X86_ #define CACHE_ALIGN 32 #endif #ifdef _ALPHA_ #define CACHE_ALIGN 64 #endif #ifdef _IA64_ #define CACHE_ALIGN ?? #endif #define CACHE_PAD(Name, BytesSoFar) \ BYTE Name[CACHE_ALIGN - ((BytesSoFar) % CACHE_ALIGN)] struct CUSTINFO { DWORD dwCustomerID; // Mostly read-only char szName[100]; // Mostly read-only //Force the following members to be in a different cache line. CACHE_PAD(bPad1, sizeof(DWORD) 100); int nBalanceDue; // Read-write FILETIME ftLastOrderDate; // Read-write //Force the following structure to be in a different cache line. CACHE_PAD(bPad2, sizeof(int) sizeof(FILETIME)); };CACHE_PAD的作用就是填充高速缓存行让不相关的数据存在下一个高速缓存中。所以如果我们编码多注意这些细节代码的质量就会更高谢谢你的阅读
延伸阅读

更多相关文章

2026/10/8 0:47:45

可穿戴电磁场检测设备Fany Watch:从传感器选型到用户体验设计

1. 项目概述:当可穿戴设备成为“电磁感知”的延伸几年前,我还在为一个智能家居项目做电磁兼容性(EMC)测试,那会儿需要扛着笨重的频谱分析仪和近场探头,在实验室里一点点扫描电路板,寻找那个导致…

2026/10/8 0:48:52

Vmware虚拟机三种网络模式详解

前言 由于Linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有vmware workstations和virtual box等。在使用虚拟机…

2026/10/7 22:46:21

可穿戴电磁环境监测手表设计:从多频段感知到低功耗实现

1. 项目概述:当可穿戴设备成为你的“电磁雷达”几年前,我身边一位从事精密电子研发的朋友,因为长期头痛和失眠跑遍了各大医院,最终所有生理指标都显示正常。直到一次偶然的机会,他避开所有电子设备去山里住了几天&…

2026/10/9 4:44:45

Mac玩LOL国服不用装Windows:CrossOver+Metal方案实录

1. 项目概述:为什么Mac用户想玩LOL国服,又为什么“不用装Windows”成了刚需?“不用装Windows!在MacOS中也可以玩英雄联盟LOL国服!”——这句话不是营销噱头,而是近五年来大量Mac笔记本用户反复搜索、持续验…

2026/10/9 4:44:45

两节点Gauss-Seidel潮流计算的MATLAB实现与收敛分析

第一次接触潮流计算时,我对着两节点电路图犯过嘀咕:这不过是一个电源、一条线路、一个负荷的简单电路,欧姆定律加基尔霍夫电压定律分分钟就能列方程,为什么还要专门搞一套 Gauss-Seidel 迭代?直到自己动手在 MATLAB 里…

2026/10/9 4:44:45

帛书周易“川”卦真相:为何不能简单通假为坤

摊开长沙马王堆三号汉墓出土的帛书《周易》影印件,你会看到开篇第一卦叫“键”,第二卦叫“川”。今天我们读的通行本《周易》,第一卦是乾,第二卦是坤。“键”对应“乾”,这事儿好办,古音相通的通假字&#…

2026/10/9 4:44:45

RISC-V CSR深度解析:特权架构的硬件中枢与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 4:39:44

医药知识图谱问答系统:Python+BERT+词典组合拳实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑