首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何分配一个我们确信不会被分页的缓冲区?

我们如何分配一个我们确信不会被分页的缓冲区?
EN

Stack Overflow用户
提问于 2012-10-30 04:49:34
回答 1查看 112关注 0票数 3

也许这一点与内核中的缓冲区分配有关。

假设我们想要编写一个音乐播放器,如果发生分页,这可能会导致播放质量不稳定的音乐。

视频播放器,我们想写一个实时软件,或任何东西。

我们希望将其中一个CPU分配给一个进程,或者使一个进程具有非常高的优先级,然后我们希望确保我们的缓冲区不会被分页到HDD。在C和Linux中是如何做到的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 04:56:37

通过调用:

代码语言:javascript
复制
int mlock(const void *addr, size_t len);//included in header #include <sys/mman.h>

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

代码语言:javascript
复制
int munlock(const void *addr, size_t len);

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

EDIT:有关更多详细信息,请查看以下链接: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用户身份启动,设置宽松的实时和内存锁定要求,切换用户in,然后运行实际的程序。

P.S通常当RT需求出现时,你不仅会将程序锁在内存中,而且还会将调度器设置为实时模式,为此你可以检查sched_setscheduler(..)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13129426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档