我需要一个可以在使用后重用/回收内存的池结构,即,不要动态进行任何分配或释放(尽管你仍然需要在程序启动时分配内存)
Boost.Pool不支持这样的机制;还有其他选择吗?
答案 0 :(得分:2)
创建它后,只为池分配大量空间怎么样?函数pool::orderedMalloc(n)
似乎就是这样做的。
是的,您仍在“运行时”分配,但仅在流程开始时分配。
答案 1 :(得分:1)
标准堆机制在释放后重用内存;在程序的生命周期内,许多不同的值可以使用单个地址范围。但是,正如您所建议的那样,此类机制会在运行时根据需要从系统中获取内存。
如果你需要预先分配一个合适大小的内存块然后从那里分配出来,你就会看到像重载全局运算符new
这样的敏感内容及其朋友在预分配空间中进行分配,当预分配的空间耗尽时,可能会抛出异常。 [不要在没有成人监督的情况下尝试这一点 - 并且不要求我监督;我是一只鸡!]