C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在boost(c)中将内存页锁定到物理RAM?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在搞乱boost中的共享内存对象,因为实时C应用程序需要将内存页面锁定到物理内存中.在增强中我没有看到这样做的方法.我觉得我错过了一些东西,因为我知道 WindowsLinux都有办法做到这一点(mlock()和VirtualLock()).

解决方法

根据我的经验,最好编写一个小型跨平台库,为此提供必要的功能.当然,内部会有一些#ifdef-s.

这样的事情(假设GetPageSize和Align *已经实现):

void LockMemory(void* addr,size_t len) {
#if Defined(_unix_)
    const size_t pageSize = GetPageSize();
    if (mlock(AlignDown(addr,pageSizE),AlignUp(len,pageSizE)))                                                                                     
        throw std::exception(LastSystemErrorText());
#elif Defined(_win_)
    HANDLE hndl = GetCurrentProcess();
    size_t min,max;
    if (!GetProcessWorkingSetSize(hndl,&min,&maX))
        throw std::exception(LastSystemErrorText());
    if (!SetProcessWorkingSetSize(hndl,min + len,max + len))
        throw std::exception(LastSystemErrorText());
    if (!VirtualLock(addr,len))
        throw std::exception(LastSystemErrorText());
#endif
}

我们还试图使用一些boost :: libraries,但是他们厌倦了修复跨平台问题并转而使用我们自己的实现.它写得慢,但它有效.

大佬总结

以上是大佬教程为你收集整理的如何在boost(c)中将内存页锁定到物理RAM?全部内容,希望文章能够帮你解决如何在boost(c)中将内存页锁定到物理RAM?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。