【Example】C++ Vector 内存预分配的良好习惯

为什么要对 Vector 进行内存预分配?

1,Vector 本身是一个内存只会增长不会减小的容器。

2,Vector 存在 size 和 capacity 两种计数,size 即元素个数,capacity 则是容量即 vector 在内存当中的大小,理论上始终 capacity >= size。

3,Vector 的 push_back 函数逻辑是,当 capacity 不够的时候,去申请一块新内存,将原有数据拷贝到新内存再释放旧内存,中间有一个申请、拷贝、释放的操作。

4,最根本目的是加强 Vector 写入时的性能。

 

什么样的 Vector 需要进行内存预分配?

存储的对象内存消耗大且数量多的Vector。

如果一个Vector就存了几百条int,则没必要去折腾。

 

#include <iostream>

#include <vector>
using std::vector;

// 随便创建一个结构体
typedef struct Point {
    int x;
    int y;
    int val;

    // 顺带演示统一初始化 (现代C++)
    Point(int x, int y, int value) : x(x), y(y), val(value) {};
};

int main()
{
    // 定义两个 vector
    vector<Point> pointsT1;
    vector<Point> pointsT2;

    for (size_t i = 0; i < 45000; i++)
    {
        pointsT1.push_back(Point(i, i, -99999));
    }
    // 执行耗时 8.3213 毫秒
pointsT2.reserve(45000); for (size_t i = 0; i < 45000; i++) { pointsT2.push_back(Point(i, i, -99999)); } // 执行耗时 3.7997 毫秒 return EXIT_SUCCESS; }

 

=================================

由此可见,进行了预分配内存操作的 Vector 存入时间缩短了 65%。

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
【Example】C++ Vector 内存预分配的良好习惯 【Example】C++ Vector 内存预分配的良好习惯 【Example】C++ Vector 内存预分配的良好习惯 【Example】C++ Vector 内存预分配的良好习惯   TRANSLATE with 【Example】C++ Vector 内存预分配的良好习惯 COPY THE URL BELOW 【Example】C++ Vector 内存预分配的良好习惯 【Example】C++ Vector 内存预分配的良好习惯 Back EMBED THE SNIPPET BELOW IN YOUR SITE 【Example】C++ Vector 内存预分配的良好习惯 Enable collaborative features and customize widget: Bing Webmaster Portal Back
上一篇:service


下一篇:使用基于 SpringMVC 的透明 RPC 开发微服务