std::vector 在频繁 push_back 时如何减少内存重新分配和拷贝开销?

在使用 C++ std::vector 存储大量数据(例如百万级以上)时,频繁调用 push_back 会导致多次内存重新分配和元素拷贝/移动,影响性能。
我希望了解在以下场景中,有哪些工程上可靠的方法可以最小化这种开销。
运行环境:编译器:GCC 11.4 / Clang 15
C++ 标准:C++17 或 C++20
操作系统:Ubuntu 22.04
硬件:普通开发机(16GB 内存)

#include <vector>
#include <chrono>
#include <iostream>

struct MyData {
    std::vector<int> data;
    MyData() { data.resize(100); }
    // 拷贝开销较大
};

int main() {
    std::vector<MyData> vec;
    auto start = std::chrono::steady_clock::now();

    for (int i = 0; i < 1000000; ++i) {
        vec.push_back(MyData());  // 频繁 push_back
    }

    auto end = std::chrono::steady_clock::now();
    std::cout << "Cost: " 
              << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count()
              << "ms\n";
    return 0;
}

希望回答能给出具体的代码对比示例和性能测试结论。