gpt4 book ai didi

C++ 对象的动态大小

转载 作者:行者123 更新时间:2023-11-27 23:03:23 25 4
gpt4 key购买 nike

如何确定对象的运行时大小?

我们不是在谈论 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);

在 vector 的情况下,它可以这样实现:

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 来绕过所有实现细节?

最佳答案

不,没有通用的方法来做到这一点,因为您需要一种通用的方法来识别对象中的指针并找到它们的引用对象的大小。如果你发现一个空白*怎么办?如果找到指向数组的指针怎么办?在某些情况下,您甚至无法计算出这些东西的大小!

关于C++ 对象的动态大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com