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

标签 c++ optimization heap-memory fragmentation

假设我有以下内容:

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/

相关文章:

c++ - 在 VTable 上下文中,虚拟方法调用和直接方法调用有什么区别?

Django QuerySets 和缓存

c - malloc 不适用于列表的第二个元素

未生成 Java 堆转储

c++ - 溅射结构

c++ - C++中的多行正则表达式模式

c++ - 从文件 C++ 获取输入(矩阵数组输入)

c - 优化技巧

c++ - 两个8位数组协方差的快速实现

memory - JMeter OutOfMemoryError