是否有一种方法来确保数组变量(unsigned int*)将在内存中

Is there a way to make sure an array variable (unsigned int*) will be in memory?

本文关键字:unsigned int 内存 变量 确保 一种 方法 是否 数组      更新时间:2023-10-16

我需要为一个非常大的数组中的所有整体设置一些默认值。它花了我很长时间(110-120毫秒),我怀疑这是因为内存中的失误。

我使用memset/std:fill来设置默认值。是否有一种方法来确保数组将驻留在内存之前的memset/fill?

假设这是一个大的内存映射文件,您可以使用带有MADV_WILLNEED参数的madvise() libc调用向操作系统暗示您将很快访问提到的区域。

然而,YMMV,由于数组需要足够大,因此产生的系统调用的好处不会被调用的成本所抵消

您可以使用mlock以每页粒度锁定内存,尽管只能锁定固定数量(我不确定OS X上的限制是什么,但您可以使用getrlimitRLIMIT_MEMLOCK来检查它)。

很可能您有一个多核处理器,如果不在单核cpu上使用,memset之类的函数实际上会降低性能。可能是互斥锁导致了速度变慢。尝试在堆栈上分配内存,而不是动态内存。由于它是一个非常大的数组,所以我将尝试制作自己的内存管理器并将其存储在多个线程中(但这只是我在快速阅读一篇文章后产生的想法)。一种标准的方法是为每个线程使用一个内存分配器。无论如何,我都要研究memset以外的东西。

也许下面的文章会有帮助

相关文章: