败犬日报 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
让有扩容和无扩容的表现一致?