为已知数量的结构分配足够的内存
Allocating Sufficient Memory for a Known Number of Structs
第一次实现调用构造函数时已知节点总数且性能是最高优先级的图。
之前没有分配过内存,所以过程有点懵
所需的节点数为 (n*(n+1))/2,其中 n 是传递给构造函数的字符串的长度。
#include <string>
struct ColorNode {
ColorNode* lParent;
ColorNode* rParent;
char color;
};
class ParentGraph {
std::string base;
int len, nodes;
ParentGraph(std::string b): base(b) {
len = base.length();
nodes = (len * (len + 1)) / 2;
// how to allocate enough memory for number of copies of "ColorNode" equal to "nodes"?
}
};
在此实例中分配内存的最佳做法是什么?
预先分配内存会对性能产生重大影响吗?
事实证明数组或向量是更好的选择,但确实需要在数据结构和内存分配方面进行实践。
感谢您的考虑。
使用
std::vector<ColorNode> nodes;
以后的生活会很简单
如果您知道自己想要的尺码
,可以对std::vector有所帮助
auto nodes = std::vector<ColorNode>(size);
这将为您在堆上分配一个连续的数组,管理它的增长、分配、释放等。
如果你这样做 new ColorNode[size]
(或者甚至 malloc(....)
如果一些邪恶的人试图说服你原始 malloc 会更快),你基本上会得到相同的内存结构。但是你必须自己做所有讨厌的管理。
只有当您有太多对象无法放入一个连续的内存块时,您才需要偏离这一建议。如果是这样就说
第一次实现调用构造函数时已知节点总数且性能是最高优先级的图。
之前没有分配过内存,所以过程有点懵
所需的节点数为 (n*(n+1))/2,其中 n 是传递给构造函数的字符串的长度。
#include <string>
struct ColorNode {
ColorNode* lParent;
ColorNode* rParent;
char color;
};
class ParentGraph {
std::string base;
int len, nodes;
ParentGraph(std::string b): base(b) {
len = base.length();
nodes = (len * (len + 1)) / 2;
// how to allocate enough memory for number of copies of "ColorNode" equal to "nodes"?
}
};
在此实例中分配内存的最佳做法是什么?
预先分配内存会对性能产生重大影响吗?
事实证明数组或向量是更好的选择,但确实需要在数据结构和内存分配方面进行实践。
感谢您的考虑。
使用
std::vector<ColorNode> nodes;
以后的生活会很简单
如果您知道自己想要的尺码
,可以对std::vector有所帮助auto nodes = std::vector<ColorNode>(size);
这将为您在堆上分配一个连续的数组,管理它的增长、分配、释放等。
如果你这样做 new ColorNode[size]
(或者甚至 malloc(....)
如果一些邪恶的人试图说服你原始 malloc 会更快),你基本上会得到相同的内存结构。但是你必须自己做所有讨厌的管理。
只有当您有太多对象无法放入一个连续的内存块时,您才需要偏离这一建议。如果是这样就说