好的,所以我找不到很多答案,这是内存管理中的一个简单问题。我知道当计算机从内存中拉出时,它会根据您的处理器在高速缓存行中缓存32-64位内存。我的问题是它只存储1个缓存行的内存或多个内存,如果有多少个?
例如说我们正在使用c ++,并且我使用for循环拉vector<int>
,然后我使用这些整数将信息从另一个vector
中拉出来,而这个信息很可能不在它附近在记忆中。这有资格作为2拉,然后一切都被缓存,或者只是从内存不断拉?基本上,它会拉vector<int>
并将其存储在缓存中,然后拉另一个vector
并将其存储在不同的捕获线中吗?因此,从那时起只拉两次然后从它的缓存内存中获取?假设每个向量= 1个捕获行的数据大小。
编辑:好的就是在同一行....我有第二个问题:让我们假设我的初始vector<int>
被调用并在for循环中迭代,然后引用多个{{ 1}}。当它缓存这些向量时,显然它会有一个限制,所以它会开始写入以前的缓存吗?在哪种情况下,它会以什么顺序写入先前的高速缓存行,FIFO,FILO,以及其他一些方式?
答案 0 :(得分:0)
有不同类型的缓存。通常,缓存量取决于处理器。模式处理器有3级缓存,其中最快(和最小)称为L1,通常介于128kb和512kb之间,其中最慢(和最大)为1mb到4mb。
无论处理器架构如何,每次访问内存都是64位长。因此,使用64位长操作数访问内存效率最高。
缓存也可以存储来自不同页面的内存。