gpt4 book ai didi

java - 在 C++ 与 Java 中利用对象的巨大 vector (或数组?)的最快方法

转载 作者:太空狗 更新时间:2023-10-29 20:55:43 25 4
gpt4 key购买 nike

我正在为计算生物化学项目编写一些代码,我需要能够拥有一个包含超过 1000 万个对象的数组或 vector ,并运行大约 50-1 亿次蒙特卡洛迭代,其中每次迭代都可以修改随机列表中的一个对象。我是从 Java 过渡到 C++ 的新手(希望在其他方面获得更多速度改进)。

我的实验室正在订购一台配备 128 GB RAM 和 2 个处理器的计算机,但我目前的计算机只有 4GB RAM。我目前使用的编译器是 Visual Studio Express,不过我听说 G++ 被用于我们的一些合作者。如果有人能提供编译器建议,我将不胜感激,因为我知道其中一些存在运行时性能差异。

我的主要问题是我什至无法合理地编译这些声明:

#include <iostream>
#include <random>
#pragma pack(push, 16) //Mostly ignorant about what this does
using namespace std;

struct RNAObject {
public:
string sequence;
string seqComplement;
int bindingInx5Prime;
int bindingInx3Prime;
int length;
enum type {MONOMER, SINGLE_STRAND, DOUBLE_STRAND, HAIRPIN, RIBOZYME};
};

void main() {
const static int maxSize = 10000000;
//RNAObject RNASoup[maxSize]; -Does not compile, stack overflow
//RNAObject* RNASoup[maxSize]; -Does not compile, stack overflow
vector<RNAObject> RNASoup(maxsize); //Compiles, but extremely slow already
cout << "Hello World"; //Stopped the compile before this line could happen
}

但是,在同一台计算机上我的 Java 设置中,以下行立即编译,一点也不困难:

int maxSize = 10000000
RNAObject RNASoup[] = new RNAObject[maxSize];

我还有很长的路要走,所以任何相关的建议都将不胜感激。

最佳答案

你的两段代码(C++ 和 Java)不等价。

您的 C++ vector 声明创建一个 maxSize 对象的 vector ,并将新实例化的对象分配给每个 maxSize 元素(因此启动时间较慢)。

您的 Java 代码只是创建 maxSize referencesRNAObject。与 C++ 代码等效的 Java 代码是:

int maxSize = 10000000
RNAObject RNASoup[] = new RNAObject[maxSize];
for (int i = 0; i < maxSize; i++)
RNASoup[i] = new RNAObject();

关于java - 在 C++ 与 Java 中利用对象的巨大 vector (或数组?)的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com