假設Octree()是一個元素型別為 double 的容器。
我可以sizeof(Octree)用來確定我的八叉樹占用了多少位元組的記憶體嗎?
Sizeof() 如果我更改八叉樹的解析度/深度,應該會發生變化 - 在我測驗時似乎并非如此。
有沒有辦法可以確定八叉樹的動態分配記憶體大小?
uj5u.com熱心網友回復:
No.sizeof回傳物件的大小。這是物件型別的大小。在整個程式中保持不變。sizeof不回傳物件的成員函式動態分配的記憶體量,并且不能多載這樣做。
有沒有辦法可以確定八叉樹的動態分配記憶體大小?
當然。您可以跟蹤您分配的所有動態記憶體,并將它們的大小放在一起以獲得總數。這不包括分配器本身使用的資料結構消耗的開銷。沒有標準的方法來衡量。
uj5u.com熱心網友回復:
正如其他人所說,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;
}
wherevoid Visit(const Octree<T> &, std::function<void(const Octree<T>&)>是遍歷樹的每個節點并呼叫提供的函式的函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382469.html
上一篇:靜默標準輸出/標準錯誤
下一篇:從向量中洗掉一組專案?[復制]
