Thread function with passed by reference vector is slow to start

Я смотрел на потоки C++0x и получил такой код:

#include <vector>
#include <iostream>
#include <thread>
void TestFunc(const vector<int>& vVec)
{
    cout << "in"<<endl;
}

int main()
{

    int sizer = 400000000;

    vector<int> vTest(sizer);
    for(int f=0; f<sizer; f++)
        vTest[f] = f;


   cout << "V created." << endl;

   thread one(TestFunc, vTest);

     one.join();    

}

Как вы можете видеть, он просто передает вектор потоку. Непонятно только то, что после появления сообщения "V создан" идет пауза. Первоначально (как я предполагал) это был вектор, который копировался для использования в функции. Чтобы предотвратить это, я передал вектор по ссылке, но это ничего не изменило.

Задержка кажется пропорциональной размеру вектора, что указывает на то, что он все еще копируется (или что-то делает с массивом). Если я попробую провести тот же эксперимент без потоков и просто вызвать функцию напрямую, то задержка есть при передаче по значению, но не при передаче по ссылке, как я ожидал.

Я попробовал сделать то же самое, используя потоки Boost вместо C++0x (хотя я читал, что они практически одинаковы) и получил тот же результат.

Есть ли какая-то причина для такого поведения или я пропустил что-то ослепительно очевидное? Спасибо.

Извините, разместил не тот тестовый код. Исправлено. Edit: Добавил include, как просили.

Скомпилировано с: g++44 -std=c++0x -lpthread tester.cpp -o test ...поскольку у меня установлен GNU 4.4 наряду со стандартным компилятором GNU, поставляемым с моим Linux (CentOS), который не поддерживает C++11.

8
задан Columbo 28 November 2011 в 13:43
поделиться