首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于堆内存访问的高速缓存

用于堆内存访问的高速缓存
EN

Stack Overflow用户
提问于 2017-02-13 21:06:24
回答 3查看 156关注 0票数 0

一般来说,台式机有两种CPU缓存,以加快内存访问速度。

1)指令缓存->,用于加速可执行指令。

2)数据缓存->,用于加速数据的获取和存储。

根据我的理解,指令cache操作在程序的代码段上,数据cache操作在程序的数据段上。是这样的吗?

从堆分配的内存没有缓存优势吗?堆内存访问是否包含在数据缓存中?

EN

回答 3

Stack Overflow用户

发布于 2017-02-14 05:05:31

指令缓存对程序的代码段进行操作,数据缓存对程序的数据段进行操作。是这样的吗?

不,CPU不知道数据段。

指令缓存用于所有执行访问,无论它们是在代码段内执行,还是在堆中作为动态创建的代码执行。

数据缓存用于所有其他非执行访问。数据可以是数据段、堆,甚至是代码段中的常量。

票数 0
EN

Stack Overflow用户

发布于 2017-02-14 07:31:38

根据我的理解,指令缓存操作在程序的代码段上,数据缓存操作在程序的数据段上。是这样的吗?

从堆分配的内存没有缓存优势吗?堆内存访问是否包含在数据缓存中?

记忆就是记忆。CPU无法区分堆和数据。

指令高速缓存通常只从程序计数器中的地址开始,并抓取下N个字节。CPU仍然不能区分它是代码段还是数据段。

票数 0
EN

Stack Overflow用户

发布于 2017-02-15 22:57:33

当你编写一个程序时,它会被翻译成机器可读的二进制代码。当CPU执行指令时,它获取这个二进制文件,解码它的含义,然后执行。基本上,这个二进制文件告诉CPU它必须执行哪些指令。如果这个二进制文件只存储在主内存中,那么在每个获取阶段,CPU必须访问主内存,这真的很糟糕。相反,我们所做的是将其中一些数据存储在离CPU更近的缓存中。由于这种高速缓存只包含与要执行的指令相关的二进制信息,因此我们称之为指令高速缓存。现在,指令需要数据才能运行。在您的高级代码中,您可能有类似arrayA[i] = (arrayB[i] + arrayC[i])的代码,它将转换为机器指令,类似于

ADD memLocationStoredInRegisterA, memLocationStoredInRegisterB, memLocationStoredInRegisterC

此指令存储在指令高速缓存中,但数据,即arrayA、arrayB和arrayC将存储在内存的另一部分中。同样,每次执行这条指令时,访问主存都是无用的。因此,我们将其中的一部分存储在另一个缓存中,我们称之为数据缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42204782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档