C++ 如何强制在缓存中保留一些内存缓冲区?

C++ 如何强制在缓存中保留一些内存缓冲区?,c++,performance,caching,memory-management,C++,Performance,Caching,Memory Management,我有一个由两部分组成的程序: 图形编程语言的虚拟机 图像处理例程 问题是,只要不处理大图像,虚拟机的工作速度就足够快。经过大图像处理后,虚拟机的性能下降约为5倍。我猜这是因为当一个大映像出现时,属于虚拟机的对象的内存缓冲区会从缓存中删除。通常情况下,处理器会为代码保留单独的缓存,为数据保留单独的缓存,但在解释程序时不会这样做 问题: 是否有任何方法可以使解释代码的优先级相同,即以某种方式将内存缓冲区标记为高速缓存内存的高优先级,或以某种方式分配一个保证保留在高速缓存中的内存缓冲区 让我补充一点,

我有一个由两部分组成的程序:

  • 图形编程语言的虚拟机
  • 图像处理例程 问题是,只要不处理大图像,虚拟机的工作速度就足够快。经过大图像处理后,虚拟机的性能下降约为5倍。我猜这是因为当一个大映像出现时,属于虚拟机的对象的内存缓冲区会从缓存中删除。通常情况下,处理器会为代码保留单独的缓存,为数据保留单独的缓存,但在解释程序时不会这样做

    问题: 是否有任何方法可以使解释代码的优先级相同,即以某种方式将内存缓冲区标记为高速缓存内存的高优先级,或以某种方式分配一个保证保留在高速缓存中的内存缓冲区


    让我补充一点,虽然图像处理要比编写程序慢得多,但在某些情况下,第二部分变得很关键——比如对图像上检测到的一组点进行后处理——这些都是简单的算术运算,在虚拟机上太慢了。

    没有精灵尘埃

    您需要以缓存友好的方式非常仔细地编写代码。看一看,绝对肯定地拿一份,仔细地读一读

    另一方面,操作系统平台允许进程内存被固定(不可交换,这与二级代码/数据缓存是不同的主题,但无论如何,你还远远不能证明二级缓存是你的问题的罪魁祸首……),但101%的情况下,操作系统比你的应用程序更了解,阻止它交换会导致性能更差,而不是更好