C++ 我是否可以检查内存块(例如,使用malloc分配的)是否保留在缓存中?
假设我使用malloc分配了一些空间。C++ 我是否可以检查内存块(例如,使用malloc分配的)是否保留在缓存中?,c++,c,caching,memory-management,malloc,C++,C,Caching,Memory Management,Malloc,假设我使用malloc分配了一些空间。 我是否可以在运行时检查此连续内存是否保留在CPU的缓存中(或者更好,在哪个缓存级别L1、L2、L3等中?确定CPU缓存的内容级别非常低,并且超出了C的功能范围。事实上,缓存对您可能正在编写的代码是完全透明的,因为CPU几乎可以决定缓存什么,并且不能在复杂的逻辑中浪费时间。通过谷歌快速搜索特定工具,可以找到英特尔调优指南和性能分析论文:。 显然,这将是特定于供应商的。AMD可能会有特定的工具。一般来说,至少从最实际的角度来看,没有(即使你可以,当你试图使用这
我是否可以在运行时检查此连续内存是否保留在CPU的缓存中(或者更好,在哪个缓存级别L1、L2、L3等中?确定CPU缓存的内容级别非常低,并且超出了C的功能范围。事实上,缓存对您可能正在编写的代码是完全透明的,因为CPU几乎可以决定缓存什么,并且不能在复杂的逻辑中浪费时间。通过谷歌快速搜索特定工具,可以找到英特尔调优指南和性能分析论文:。
显然,这将是特定于供应商的。AMD可能会有特定的工具。一般来说,至少从最实际的角度来看,没有(即使你可以,当你试图使用这些信息时,它可能已经过时了) 如果您重复读取数据,您可以相当容易地测量长期平均访问时间,这就可以很好地指示数据的来源
有一些(大部分是嵌入式)处理器可以让您锁定缓存中的一些数据,或将缓存的一部分作为可寻址内存保留,您可以手动管理。否,但您可以使用预取指令在使用前将其从内存移到缓存。如果数据已经在缓存中,这些指令应该很快(有一些特定于体系结构的警告,但我不知道您使用的是哪个平台) 之所以可以查询内存是否在缓存中,是因为硬件管理的级别低于您可以轻松观察到的级别。在具有硬件管理TLB的体系结构上,内存将通过虚拟地址到处跟踪