繁体   English   中英

C++ 使用 sizeof() 确定八叉树的大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM