簡體   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