我需要减少我的本地Windows C++应用程序使用的内存,同时不影响其性能。
我的主要数据结构由数千个实例组成,动态分配,以下是Line
类:
struct Properties
{
// sizeof(Properties) == 28
};
// Version 1
class Line
{
virtual void parse(xml_node* node, const Data& data)
{
parse_internal(node, data);
create();
}
virtual void parse_internal(xml_node*, const Data&);
void create();
Properties p;
};
但是我注意到我可以摆脱类成员p
,因为我只需要在解析方法内部使用它,所以我改变了Line
实现:
// Version 2
class Line
{
virtual void parse(xml_node* node, const Data& data)
{
Properties p;
parse_internal(node, data, &p);
create(&p);
}
virtual void parse_internal(xml_node*, const Data&, Properties*);
void create(Properties*);
};
这样可以减少分配的内存数兆,但它增加了超过50毫秒的运行时间。我想知道这是如何可能的,考虑到该应用程序已经针对发布版本进行了编译,并且开启了完全优化速度。是由于参数传递吗?还是由于我
struct Properties
的堆栈分配?更新:每个实例只调用一次Line::parse
方法。数据结构由一个std::vector
和多个线程管理的不同子集的Line
组成。
const&
传递Properties
而不是指针,但这不会使其运行更快。你能提供一个最小程序以重现这种行为(这样我们就可以看到如何调用/实例化它)吗? - Galik