代码之家  ›  专栏  ›  技术社区  ›  StackedCrooked

创建作用域自定义内存池/分配器?

  •  3
  • StackedCrooked  · 技术社区  · 15 年前

    {
        // Limit memory to 1024 KB
        ScopedMemoryPool memoryPool(1024 * 1024); 
    
        // From here on all heap allocations ('new', 'malloc', ...) take memory from the pool.
        // If the pool is depleted these calls result in an exception being thrown.
    
        // Examples:
        std::vector<int> integers(10);
        int a * = new int [10];
    }
    

    我在boost库或者其他任何地方都找不到这样的东西。

    有没有一个根本性的问题使得这不可能?

    5 回复  |  直到 15 年前
        1
  •  3
  •   Mike    15 年前

        2
  •  2
  •   dash-tom-bang    15 年前

    您还可以尝试为STL容器编写一个自定义分配器,尽管这类工作似乎通常是不建议的。(我以前做过,很乏味,但我不记得有什么具体问题。)

    写下你自己的记忆分配器不是给胆小鬼的。你可以看看 Doug Lea's malloc ,它提供了“内存空间”,您可以在您的作用域构造中使用它。

        3
  •  1
  •   pm100    15 年前

    我将回答另一个问题。看看“高效c++”这本书。他们讨论的其中一件事就是实现这类事情。那是一个网络服务器

    对于这种特殊情况,您可以通过重写新的并向STL提供自定义分配器来扰乱c++层。

    或者您可以在malloc级别混乱,从一个定制的malloc开始,然后从那里开始工作(比如dmalloc)

        4
  •  0
  •   dirkgently    15 年前

    有没有一个根本性的问题使得这不可能?

        5
  •  0
  •   Potatoswatter    15 年前

    如果目的是该范围内的所有分配都与该分配器对象一起发生,那么它本质上是一个线程局部变量。

    因此,如果使用 static 或全局变量来实现它。否则,对于分配器的无状态性来说,这是一个不错的解决方案。

    vector< int, UseScopedPool >