Mathematica, заканчивающийся память

Я использую константу на параметрах функции, которые являются ссылками (или указатели), которые находятся только [в] данных и не будут изменены функцией. Значение, когда цель использовать ссылку состоит в том, чтобы не копировать данные а не позволять изменять переданный параметр.

константа Помещения на булевской переменной b параметр в Вашем примере только помещает ограничение на реализацию и не способствует для интерфейса класса (хотя не изменение параметров обычно рекомендуется).

функциональная подпись для

void foo(int a);

и

void foo(const int a);

является тем же, которое объясняет Ваш.c и .h

Asaf

18
задан Sam Derbyshire 28 October 2009 в 22:35
поделиться

1 ответ

Ой, это неприятно.

Происходит то, что N будет кэшировать результаты, чтобы ускорить будущие вычисления, если они вам снова понадобятся . Иногда это абсолютно то, что вам нужно, но иногда это просто ломает мир. К счастью, у вас есть несколько вариантов. Один из них - использовать команду ClearSystemCache , которая делает именно то, что написано на банке. После того, как я некоторое время прогонял ваш непараллелизованный цикл (прежде чем мне надоело и прервал вычисления), MemoryInUse сообщил об использовании ~ 160 МБ. При использовании ClearSystemCache это уменьшилось примерно до 14 МБ.

Одна вещь, на которую вы должны обратить внимание, вместо программного вызова ClearSystemCache - это использовать SetSystemOptions для изменения поведения кэширования. Вам следует взглянуть на SystemOptions ["CacheOptions"] , чтобы увидеть, какие есть возможности.

EDIT: Неудивительно, что кеширование вызывает большую проблему для более сложных выражений. Необходимо где-то спрятать копии этих выражений, а более сложные выражения требуют больше памяти.

11
ответ дан 30 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: