Skip to content

败犬日报 2025-03-30

1. 栈内存访问比堆内存访问快吗

并不。现在的 CPU 架构栈内存和堆内存性能是一样的,只有 cache 影响访问速度。

栈内存“性能好”应该指分配和释放速度。

2. 怎么提高 cache 命中率

prefetch、提高 ttl、对过期数据打 patch。

3. vector::push_back 如果有扩容,为什么先构造传入的元素而非原有元素

cpp
#include <iostream>
#include <vector>

struct A {
    int x;
    A(int x) : x(x) {}
    A(A&& other) noexcept {
        x = other.x;
        std::cout << "move " << x << "\n";
    }
};

int main() {
    std::vector<A> vec1;
    vec1.push_back(A(1));
    std::cout << "***\n";
    vec1.push_back(A(2));
    return 0;
}

输出:

text
move 1
***
move 2
move 1

标准没有规定顺序,实现上的顺序是为了满足“有无扩容表现一致”的要求。

例如 vec.push_back(vec.front()),如果先移动原有元素,vec.front() 就悬垂引用了。

再例如 vec.push_back(std::move(vec.front())),想想怎么实现 push_back 让有扩容和无扩容的表现一致?