c++ - 此 C++ 堆栈分配器的改进?

标签 c++ memory memory-management

对基于堆栈的分配器有什么建议吗? (除了建议使用带有私有(private)/公共(public)成员的类)

struct Heap
{
    void* heap_start;
    void* heap_end;
    size_t max_end;

    Heap(size_t size)
    {
        heap_start = malloc(size);
        heap_end = heap_start;
        max_end = size + (size_t) heap_start;
    }

    ~Heap()
    {
        ::free(heap_start);
    }

    void* allocate(size_t bytes)
    {

        size_t new_end = ((size_t) heap_end) + bytes;

        if( new_end > max_end )
            throw std::bad_alloc();

        void* output = heap_end;
        heap_end = (void*) new_end;
        return output;
    }

}

最佳答案

您已经实现了一个基于堆栈的分配器。不留空隙就无法释放。通常,池是指具有固定大小插槽的连续内存块,它们是双向链接的,以允许恒定时间添加和删除。

Here's one您可以用作指南。它与您的相同,但包括分配节点上的基本迭代器,并使用模板来识别类型。

关于c++ - 此 C++ 堆栈分配器的改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771458/

相关文章:

c++ - const int 定义的变量是在编译时确定的吗?

c++ - 堆数据困惑

memory - 使用什么来查看 Spark 的内存使用情况(使用 YARN)?

c++ - 载体如何清理自己? (或者他们呢?)

iphone - 从 iPhone 内存中清除可清除页面

.net - .NET (wpf) 应用程序的内存管理

c++ - 窗口处理管理器

c# - 将结构从非托管 C++ 传递到 C#

c++ - 如何正确推导从 std::set::begin() 返回的迭代器的取消引用类型?

c++ - Win32 C++ 中的 DrawText 内存使用量增加