У меня есть вложенные циклы, которые вставляют целые числа в вектор пустых векторов a1i.
vector<vector<int>> a1i = {{},{},{},{},{},{},{}...};
#pragma omp parallel for simd
for(int x = 0;x < a1i.size();x++){
for(int y = 0; y < x - 1; y++){
a1i[x].insert(a1i[x].end(),y);
}
}
вектор будет выглядеть примерно так после l oop.
a1i = {
{},
{},
{0},
{0,1},
{0,1,2},
{0,1,2,3},
{0,1,2,3,4}
...
}
l oop ведет себя хорошо, когда размер a1i мал, но если он большой, например, 5000 элементов, моя программа падает из-за циклов.
Если я оцениваю размер вектора векторов, он будет равен половине вектор 5000 на 5000 векторов целых чисел должен занимать около 50 000 000 байт (50 мегабайт). Я уверен, что у меня больше 50 мегабайт памяти. Вектор - это глобальная переменная, поэтому он должен быть в куче?
Или здесь есть что-то еще, занимающее огромное количество памяти?
Является ли моя оценка в правильном порядке величины?
Проблема пытается одновременно vector.insert ()?
Я вижу, что каждый поток будет вставлять в a1i свой вектор, поэтому я ничего не подозреваю.
Я что-то упускаю из виду, что очень очевидно?