Возможный дубликат:
являются std :: vector элементы гарантированно непрерывны?
Я столкнулся с техникой, в которой люди используют вектор в C ++ для получения или отправки данных для операций MPI, поскольку, как говорят, элементы хранятся в памяти непрерывно.
Однако я по-прежнему скептически отношусь к тому, останется ли этот подход устойчивым для вектора любого размера, особенно когда вектор вырастает до определенного размера, когда это предположение может нарушиться.
Ниже приведен пример того, о чем я говорю:
MPI_Recv( &partials[0] , partials.size() , mpi_partial , 0,
DALG_ELIMINATE_REQ_MSG ,MPI_COMM_WORLD , &status );
vector
не разбрасывает элементы случайным образом, но все это при необходимости перемещается. Таким образом, будет ли такое использование безопасным, зависит от того, что вы имеете в виду под «ростом» - если вы имеете в виду, что в будущем ваша программа будет использовать больший размер, чем сегодня, прекрасно. Если вы имеете в виду, что вызываетеresize
, пока MPI удерживает указатель, это не нормально. - person Steve Jessop   schedule 30.09.2011