使用缓存使矢量快或什么?

时间:2017-10-31 09:24:48

标签: c++ vector dynamic-memory-allocation allocation

我对c ++ vector有疑问。我在vector(int)类型上测试 1000000 push_back ,并且仅在 4毫秒

中完成
vector <int> Test;
    auto start_t = chrono::high_resolution_clock::now();
    for (int i = 0; i < 1000000; i++) Test.push_back(i);
    cout << chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start_t).count() << " milliseconds\n" << endl;

但如果我制作了自己的阵列引擎,即使我将分配设置为分配这样的大小(计数* 2)(每个分配时间),也需要大约3分钟来执行此操作

template <typename T>
class Array {

private:

    T * storage_;

    int alloc_ = 0;
    int count_ = 0;
    int all_ = 0;
public:

    Array() = default;
    ~Array() { delete[] storage_; }

    void Set(const T & __t) {

        if(count_ + 1 >= alloc_) {

            T * temp = new T[count_ * 2 + 4];
            if(count_ > 0) for (int i = 0; i < count_; i++) temp[i] = storage_[i];
            delete[] storage_;
            storage_ = temp;
            all_++;
        }
        storage_[count_++] = __t;
    }

    int all() { return all_; }
    int count() { return count_; }
};

......这速度怎么可能?是缓存吗?因为我不相信它是一个c ++优化,因为在优化上做了什么,它不能像这样快速制作矢量...我认为它是完全缓存或其他检测我们有1000000次推回的东西所以分配1000000大小在开始和做过程......是真的还是别的什么?

1 个答案:

答案 0 :(得分:2)

您的重新分配逻辑已损坏,因为它未设置alloc_。因此它每次都重新分配。你的all_成员毫无意义。看来你在某种程度上混淆了这两个变量。