Перераспределение матрицы из неуправляемой в управляемую - PullRequest
0 голосов
/ 09 марта 2012

Я пытался заставить кусок кода перераспределить огромную неуправляемую матричную структуру (а именно std::vector<std::vector<T> >) в эквивалентную управляемую структуру (cli::array<T,2>). Поскольку я не могу одновременно хранить обе структуры в памяти, я решил записать в файл и прочитать структуру обратно. Проблема состоит в том, что, как только я удаляю исходную матрицу, и, следовательно, память, пытающаяся выделить управляемую память для матрицы, дает сбой.

Я представляю, что это может иметь какое-то отношение к кучам разных сред выполнения cpp vs clr. Но не могу найти какие-либо конкретные детали. Возможно ли, что среда выполнения cpp сохраняет пространство кучи, что мешает куче clr выделять матрицу обратно? Если это так, то можно ли принудительно заставить среду выполнения cpp очистить пространство кучи, чтобы освободить место для кучи clr.

Теперь, чтобы уточнить, матрица назначения должна быть двумерным массивом, а не зубчатым массивом. Я знаю, что в этом есть проблема, которую нельзя изменить. В противном случае я мог бы переместить матрицу меньшими порциями.

Спасибо, заранее.

1 Ответ

0 голосов
/ 09 марта 2012

Если вы не можете одновременно хранить их в памяти, я думаю, размер массива превышает гигабайт.Если вы хотите поместить это в управляемый прямоугольный (не зубчатый) массив, CLR придется найти гигабайт непрерывной памяти ... Это может легко произойти.версия, или 32-битная версия, объявленная как «большой адрес осведомлённый»?Последний предоставит вам 4 гигабайта адресного пространства, если он работает на 64-битной Windows-машине, он может просто подойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...