linux由于使用了虚拟内存技术,那么在一般的情况每个内存页都有可能被刷出物理内存,出于某种目的比如性能和安全性方面
考虑,有时候需要保证内存页不会被淘汰,我们可以使用下面函数:
当我们需要保证从地址A开始的L个字节永远不被淘汰,可以执行mlock(A, L),当要解除这个限定,可以执行munlock(A, L)。
需要注意的是有时候可能会锁不成功,因为系统限制了每个进程可以拥有的上锁内存页个数,通过ulimit -a可以查看:
max locked memory (kbytes, -l) 32
上面表示最大的锁内存页的数量是32,我们可以通过ulimit -l 修改,详细请man ulimit。