[英]C++ Using sizeof() to determine size of an Octree
假设Octree()
是一个具有 double 类型元素的容器。
我可以使用sizeof(Octree)
来确定我的八叉树占用了多少字节 memory 吗?
如果我更改八叉树的分辨率/深度, Sizeof()
应该会更改 - 当我测试它时似乎并非如此。
有没有办法确定我的八叉树动态分配的 memory 大小?
编号sizeof
返回 object 的大小。 这是object型号的大小。 在整个程序中保持不变。 sizeof
不返回 object 的成员函数动态分配的 memory 的数量,因此不能重载。
有没有办法确定我的八叉树动态分配的 memory 大小?
当然。 您可以跟踪您分配的所有动态 memory 以及它们的大小以获得总数。 这不包括分配器本身使用的数据结构所消耗的开销。 没有标准的方法来衡量它。
正如其他人所说, sizeof
只为您提供单个节点的大小(以字节为单位)(不包括节点的任何成员字段指向的任何存储)。
如果你想计算一棵树的实际大小,你需要这样的东西:
template <typename T>
std::size_t OctreeSize(const Octree<T> &tree_root_node) {
std::size_t tree_size = 0;
Visit(ref, [&tree_size] (const Octree<T> &node) {
tree_size += sizeof(node);
// If you have any dynamically-allocated object
// pointed to and owned by Octree<T>, add their size as well
});
return tree_size;
}
其中void Visit(const Octree<T> &, std::function<void(const Octree<T>&)>
是一个 function,它遍历树的每个节点并调用提供的 function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.