【问题标题】:Is there a C++ allocator that prevent an STL container from being swapped?是否有防止交换 STL 容器的 C++ 分配器?
【发布时间】:2011-10-01 15:46:16
【问题描述】:

有没有人见过调用mlock(2) 以防止STL 容器的内容被交换到磁盘的分配器?

编写这样的分配器只有一个棘手的部分,即通过对要锁定的分配进行聚类来最小化锁定页面的数量。因此,可能应该从修改一些共享内存分配器开始?

【问题讨论】:

    标签: c++ stl memory-management posix allocator


    【解决方案1】:

    如果我想实现这个(这很难想象,因为我很难相信这是解决任何问题的正确方法:^),我会尝试使用一个boost::pool_allocator(它从一个池中提供一个标准库兼容的分配器)然后 - 我忘记了细节;认为它会涉及到 singleton_pooluser_allocatorRequestedSize 模板参数? - 有一些方法可以让它位于一个池的顶部,该池通过您选择的机制请求更大的内存块,在您的情况下是分配 mlocked 页面。

    【讨论】:

    • +1 表示“我很难相信这是解决任何问题的正确方法”
    • @BillyONeal:锁定页面可以提供安全信息,也可以用于需要立即响应用户的程序,尽管在这种情况下 mlockall 是更好的选择。
    • 是的,例如,如果在 C++ 中从头开始编写加密库/工具,您将需要它。是的,显然您应该尽可能使用已建立的库进行加密。
    • @ZanLynx:可能适用于加密案例,但不适用于响应性案例。你的程序是谁说“我是最重要的,听我说!让其他程序运行得更慢,这样我看起来更好”——如果你的程序被分页,这意味着用户正在使用其他程序,使这些程序页面比您的更重要。如果您这样做是为了提高响应能力,那么您就是在更改全局状态以解决本地问题。
    • 工业数据收集应用程序中,mlockall 可能适用于小恶魔,但实​​时的东西是多余的,不是吗?
    猜你喜欢
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2018-10-03
    • 2013-06-18
    • 2013-03-13
    • 2010-09-07
    • 2011-05-04
    相关资源
    最近更新 更多