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>&)>
是遍历树的每个节点并调用提供的函数的函数。
假设 Octree()
是一个包含双精度类型元素的容器。
我可以使用 sizeof(Octree)
来确定我的八叉树占用了多少内存吗?
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>&)>
是遍历树的每个节点并调用提供的函数的函数。