C ++在没有初始化的情况下在堆栈上分配

时间:2013-09-24 09:54:46

标签: c++ class initialization stack allocation

我正在编写一个速度优化至关重要的程序。每增加1%的速度都很好。

在一个被称为批次的函数中,我需要一个(小)类MyClass的固定大小数组。一开始,我使用了std :: vector。整个事情很小(通常256项,类大小为12字节,如果数组是16字节对齐,则意味着3072字节)

现在碰巧:

  • 使用在堆栈上分配的C样式数组MyClass [256]可以提高性能。据我了解,这是因为没有进行内存分配/删除,堆栈分配是免费的。
  • 使用:: operator new进行内存分配,也可以提高性能。因为它跳过类初始化,我不需要。除此之外,我更愿意尽可能避免原始内存初始化。

因此,在堆栈上分配并跳过初始化应该更快。如果需要,我可以重写类构造函数,但我不知道如何。

谢谢,

艾蒂安

1 个答案:

答案 0 :(得分:3)

您不需要初始化?所以可能MyClass没有构造函数,也没有需要构造的数据成员?在这种情况下,编译器无论如何都不会进行任何初始化。所以只需使用new。

如果MyClass确实有一个构造函数,那么你应该考虑为什么它会像你说的那样,不需要初始化。

如果MyClass确实有需要构建的数据成员(一个std::string说)那么我会查询你的断言你不需要初始化。

但另一方面你是对的,从向量切换到数组会节省你一些时间。