对于面向性能的库,我们目前使用std::数组,其长度取决于问题。
因此,整个代码被模板化为,其中N_1、N_2是正在使用的数组的无关长度,这导致了长时间和内存密集型的编译,而性能收益可能很小。
考虑到以下情况,我们如何以最现代的方式替换这些数组:
我的第一个想法是将unique_ptr封装在一个结构中,使用T模板,并配备我们在代码中使用的所有数组方法,以最小化重构。
我的问题是:
发布于 2020-08-11 07:27:52
如果您的代码中的分配是执行分配的,那么应用程序的启动时间并不重要,并且已知向量最大大小的大小,这可能比使用std::vector和备用的简单解决方案更好。
但是,您需要的似乎是一种用于std::string的小字符串优化(SSO)。该技术允许在堆栈中存储数据,如果数据的大小足够适合类的大小(减去标记成员的大小),表示字符串。一般来说,这是一个常见的问题,以前很多人都讨论过这个问题。
有几种选择:
选择还取决于要存储的对象的大小。变体1,2,3可以很好地处理一些豆荚,但可能需要为更大的尺寸分配。变体4可能是最容易实现的,它将与豆荚和类一样工作,但它总是需要额外的内存。这就像一个带有保留的std::vector,除了数据将被分配到堆栈上,而不是堆上。变体5可能是过火的,你可能不需要它有那么多用途。
发布于 2020-08-11 05:55:30
这些数组的长度介于0到5之间。
一个好的解决方案是对每个数组使用长度为5的自动数组。与动态分配开销相比,0-4整数可能丢失的内存可能微不足道。
一个可能更好的选择可能是std::vector的自定义分配器,这取决于使用模式。但这是很多工作。
发布于 2020-08-11 05:54:51
您在问题中写道,尺寸在运行时中是已知的,在这种情况下,我不理解以前的模板化解决方案是如何工作的,因为N1和N2应该在编译时中知道才能工作。
撇开这一点不说,您可以使用固定大小的向量(std::array),如:固定尺寸矢量的C++向量中所述。
https://stackoverflow.com/questions/63352132
复制相似问题