我正在编写一个速度优化至关重要的程序。每增加 1% 的速度都是好的。
在一个被多次调用的函数中,我需要一个(小)类 MyClass 的固定大小数组。一开始,我使用了一个std::vector。整个东西很小(一般是256项,类大小是12字节,如果数组是16字节对齐的话就是3072字节)
现在发生了:
- 使用分配在堆栈上的 C 风格数组 MyClass[256] 可以提高性能。在我的理解中,这是因为没有完成内存分配/删除,堆栈分配是免费的。
- 使用::operator new 进行内存分配也可以提高性能。因为它跳过了我不需要的类初始化。除此之外,我更喜欢尽可能避免原始内存初始化。
所以在堆栈上分配和跳过初始化应该会更快。如果需要,我可以重写类构造函数,但我不知道该怎么做。
谢谢,
艾蒂安
最佳答案
不需要初始化?所以大概 MyClass 没有构造函数,也没有需要构造的数据成员?在那种情况下,编译器无论如何都不会进行任何初始化。所以只用新的。
如果 MyClass 确实有一个构造函数,那么您应该考虑为什么它会像您所说的那样不需要初始化。
如果 MyClass 确实有需要构造的数据成员(比如 std::string
),那么我会查询您关于不需要初始化的断言。
但另一方面,您说对了,从 vector 切换到数组应该可以节省您一些时间。
关于C++在堆栈上分配而不初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18978322/