0

假设我有以下内容:

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

上述在堆上分配内存的向量会成为内存碎片的原因吗?我对碎片的理解是,只有在更大、更短的分配之间有小的、长期的分配(反之亦然)时才会真正发生。

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

4

1 回答 1

3

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

于 2012-04-16T20:26:23.860 回答