gpt4 book ai didi

c - 我们如何分配一个我们确定不会被分页的缓冲区?

转载 作者:可可西里 更新时间:2023-11-01 11:44:10 25 4
gpt4 key购买 nike

也许这件事与内核中的缓冲区分配有关。
假设我们想写一个音乐播放器,如果发生分页,这可能会导致音乐播放时断断续续的低质量。
视频播放器,我们想写一个实时软件,或者任何东西。
我们想要将其中一个 CPU 分配给一个进程,或者我们将一个进程设置为非常高的优先级,然后我们想要确保我们的缓冲区不会被分页到 HDD。它在 C 和 Linux 中是如何完成的?

最佳答案

通过调用:

int mlock(const void *addr, size_t len);//included in header #include <sys/mman.h>

根据区域的起始地址及其长度,系统将保证指定的内存将驻留在 RAM 中,直到您调用

int munlock(const void *addr, size_t len);

您还可以调用函数 mlockall(MCL_FUTURE); 这将使您的所有后续内存分配成为 RAM 驻留,但这会带来分配超过物理可用内存的风险,并且结果取决于实现.

编辑:有关详细信息,请查看以下链接: http://pubs.opengroup.org/onlinepubs/007908799/xsh/mlock.html
http://pubs.opengroup.org/onlinepubs/007908799/xsh/mlockall.html

EDIT2:Zan Lynx 的评论
另请注意,使用它来锁定超过 64KB(在大多数 Linux 系统上)将需要 root 权限。在我看来,最好的方法是拥有一个以 root 身份启动的包装器,设置宽松的实时和内存锁定要求,切换用户 ID,然后运行实际程序。


P.S 通常当 RT 要求出现时,您不仅将程序锁定在 RAM 中,还将调度程序设置为实时模式,为此您可以检查 sched_setscheduler(..)

关于c - 我们如何分配一个我们确定不会被分页的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13129426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com