我有一个需要重复多次的数字序列,并将重复的数据作为指向沿大小的数据的指针(实际上是元素计数)。我需要将这些数据传递给 API。
分配内存,传递重复数据然后再次释放它的最有效方法是什么。我目前有需要重复存储在 std::vector 中的序列
我有几个想法是这样的:
// Setup code
unsigned int repeat = 30000;
std::vector<int> datavector(5, 0); // assume this would contain arbitrary numbers that needed to be repeated
// Idea 1:
{
unsigned int byte_size_step = datavector.size() * sizeof(int);
unsigned int byte_full_size = byte_size_step * repeat;
int *ptr = malloc(byte_full_size);
for(unsigned int i=0; i<repeat; i++)
{
memcpy(ptr+(i*byte_size_step), datavector.data(), byte_size_step);
}
apiFunc(ptr); // apiFunc copies the data
free(ptr)
}
// Idea 2:
{
std::vector datarepeated(datavector.size()*repeat);
for(unsigned int i=0; i<repeat; i++)
{
datarepeated.insert(datarepeated.begin()+(i*size_step), datavector.begin(), datavector.end());
}
apiFunc(datarepeated.data());
}
虽然我觉得会有一个功能或易于使用的方法来快速重复内存中的序列。我可能错过了一些东西。我个人不知道这样的事情是否可以从多线程解决方案中受益。
欢迎任何可以(最)有效地做到这一点的提示。