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

C++ Using sizeof() to determine size of an Octree

假设 Octree() 是一个包含双精度类型元素的容器。

我可以使用 sizeof(Octree) 来确定我的八叉树占用了多少内存吗?

如果我更改八叉树的 resolution/depth,

Sizeof() 应该会更改 - 当我测试它时,情况似乎并非如此。

有什么方法可以确定八叉树的动态分配内存大小?

没有。 sizeof returns 对象的大小。这是对象类型的大小。在整个程序中保持不变。 sizeof 没有 return 对象的成员函数动态分配的内存量,并且不能重载这样做。

Is there a way I could determine the dynamically allocated memory size of my octree?

当然可以。您可以跟踪您分配的所有动态内存,并将它们的大小放在一起以获得总数。这不包括分配器本身使用的数据结构所消耗的开销。没有标准的方法来衡量它。

正如其他人所说,sizeof 仅提供单个节点的大小(以字节为单位)( 包括您的任何成员字段指向的任何存储节点)。

如果你想计算一棵树的实际大小,你需要这样的东西:

template <typename T>
std::size_t OctreeSize(const Octree<T> &tree_root_node) {
  std::size_t tree_size = 0;
  Visit(
   tree_root_node,
   [&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>&)>是遍历树的每个节点并调用提供的函数的函数。