Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否可以检查内存块(例如,使用malloc分配的)是否保留在缓存中?_C++_C_Caching_Memory Management_Malloc - Fatal编程技术网

C++ 我是否可以检查内存块(例如,使用malloc分配的)是否保留在缓存中?

C++ 我是否可以检查内存块(例如,使用malloc分配的)是否保留在缓存中?,c++,c,caching,memory-management,malloc,C++,C,Caching,Memory Management,Malloc,假设我使用malloc分配了一些空间。 我是否可以在运行时检查此连续内存是否保留在CPU的缓存中(或者更好,在哪个缓存级别L1、L2、L3等中?确定CPU缓存的内容级别非常低,并且超出了C的功能范围。事实上,缓存对您可能正在编写的代码是完全透明的,因为CPU几乎可以决定缓存什么,并且不能在复杂的逻辑中浪费时间。通过谷歌快速搜索特定工具,可以找到英特尔调优指南和性能分析论文:。 显然,这将是特定于供应商的。AMD可能会有特定的工具。一般来说,至少从最实际的角度来看,没有(即使你可以,当你试图使用这

假设我使用malloc分配了一些空间。
我是否可以在运行时检查此连续内存是否保留在CPU的缓存中(或者更好,在哪个缓存级别L1、L2、L3等中?

确定CPU缓存的内容级别非常低,并且超出了C的功能范围。事实上,缓存对您可能正在编写的代码是完全透明的,因为CPU几乎可以决定缓存什么,并且不能在复杂的逻辑中浪费时间。通过谷歌快速搜索特定工具,可以找到英特尔调优指南和性能分析论文:。
显然,这将是特定于供应商的。AMD可能会有特定的工具。

一般来说,至少从最实际的角度来看,没有(即使你可以,当你试图使用这些信息时,它可能已经过时了)

如果您重复读取数据,您可以相当容易地测量长期平均访问时间,这就可以很好地指示数据的来源


有一些(大部分是嵌入式)处理器可以让您锁定缓存中的一些数据,或将缓存的一部分作为可寻址内存保留,您可以手动管理。

否,但您可以使用预取指令在使用前将其从内存移到缓存。如果数据已经在缓存中,这些指令应该很快(有一些特定于体系结构的警告,但我不知道您使用的是哪个平台)

之所以可以查询内存是否在缓存中,是因为硬件管理的级别低于您可以轻松观察到的级别。在具有硬件管理TLB的体系结构上,内存将通过虚拟地址到处跟踪