如何确定对象的运行时大小?
我们不是在谈论size of the type,而是在执行过程中可能会有所不同的对象的实际大小,例如:
vector<int> v;
auto a = MagicSizeF(v); // magic size function
v.push_back(2);
v.push_back(2);
// this should hold - ok there's small consainer optimizations and initial
// vector capacity and implementation details, but you get what I mean
assert(MagicSizeF(v) > a);
在矢量情况下,它可以像这样实现:
template<typename T>
auto MagicSizeF(vector<T> const& v) {
return v.size()*sizeof(T); // or v.capacity() to be strict
// other implementation details memory consumers could be added
}
但对于任意类型的对象,是否有标准/通用方法? ABI是否需要绕过所有实施细节?
答案 0 :(得分:4)
不,没有通用的方法,因为你需要一种通用的方法来识别对象中的指针并找到它们所指对象的大小。如果您发现空白*怎么办?如果找到指向数组的指针怎么办?在某些情况下,你甚至无法计算出这些东西的大小!