假设我有以下内容:
std::string TestFragmentation()
{
std::vector<char> buffer(500);
SomeCApiFunction( &buffer[0], buffer.size() ); // Sets buffer to null-terminated string data
return &buffer[0];
}
在堆上分配内存的上述向量是否会导致内存碎片?我对碎片的理解是,只有在较大的,较短暂的分配之间进行小的,长期的分配时才会真正发生(反之亦然)。
我不想过早地优化这种情况,所以我想听听像这样的代码应该是什么。我知道各种专家不建议在堆栈上放置大缓冲区(毕竟这就是堆的用途),所以这通常是我在编写这样的代码时首先想到的。碎片通常需要分析。我的心态应该在这里?
答案 0 :(得分:3)
如果这是表达此代码的最自然的方式,那么您应该这样做。除非你有一个非常不寻常的情况,你没有告诉我们,内存碎片甚至不应该在你的雷达屏幕上。