生命周期短的分配会导致堆碎片吗?

时间:2012-04-16 20:20:38

标签: c++ optimization heap fragmentation

假设我有以下内容:

std::string TestFragmentation()
{
    std::vector<char> buffer(500);
    SomeCApiFunction( &buffer[0], buffer.size() ); // Sets buffer to null-terminated string data
    return &buffer[0];
}

在堆上分配内存的上述向量是否会导致内存碎片?我对碎片的理解是,只有在较大的,较短暂的分配之间进行小的,长期的分配时才会真正发生(反之亦然)。

我不想过早地优化这种情况,所以我想听听像这样的代码应该是什么。我知道各种专家不建议在堆栈上放置大缓冲区(毕竟这就是堆的用途),所以这通常是我在编写这样的代码时首先想到的。碎片通常需要分析。我的心态应该在这里?

1 个答案:

答案 0 :(得分:3)

如果这是表达此代码的最自然的方式,那么您应该这样做。除非你有一个非常不寻常的情况,你没有告诉我们,内存碎片甚至不应该在你的雷达屏幕上。