假设我有以下内容:
std::string TestFragmentation()
{
std::vector<char> buffer(500);
SomeCApiFunction( &buffer[0], buffer.size() ); // Sets buffer to null-terminated string data
return &buffer[0];
}
上述在堆上分配内存的 vector 是否会导致内存碎片?我对碎片化的理解是,只有在更大、更短生命周期的分配之间有小的、长期的分配(反之亦然)时,它才会真正发生。
我不想过早地优化这种情况,所以我想听听大家对这样的代码应该怎么看。我知道很多专家不建议在堆栈上放置大缓冲区(毕竟堆就是用来干这个的),所以当我写这样的代码时,通常首先想到的就是这个。碎片通常是需要分析的东西。我在这里应该是什么心态?
最佳答案
如果这是表达此代码功能的最自然方式,那么您应该这样做。除非您有非常不寻常的情况没有告诉我们,否则内存碎片甚至不应该出现在您的雷达屏幕上。
关于c++ - 生命周期短的分配会导致堆碎片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181114/