2014-01-15 8 views
2

Я хотел бы лучше понять, как распределение памяти работает в Renderscript.Распределение памяти в Renderscript

Во-первых, я хотел бы подтвердить, выделена ли память во время выполнения или время компиляции.

В документации говорится:

Нестатические, глобальные переменные, которые вы объявите в вашем Renderscript являются выделенной памяти во время компиляции.

Это всегда так?

И, во-вторых, содержит ли память запросов Renderscript для физической памяти Android или Android?

В документации, которую я смог найти только следующее:

приложений, которые используют Renderscript по-прежнему работать в Android VM. Однако фактический код RenderScript запускается изначально и требует доступа к памяти, выделенной в виртуальной машине Android.

Который не дает четкого ответа на вышеуказанный вопрос.

ответ

2

Допустим, у вас есть скрипт (cats.rs) с некоторыми глобалов как

int hats[4096]; 
char bats[32]; 
float rats; 
// a bunch of kernels follow here 

При создании нового ScriptC_cats, все эти буферы будет выделено в рамках этого объекта сценария; требование размера устанавливается во время компиляции и подчиняется при создании экземпляра, поэтому правильная вещь будет для вас.

Все объекты RenderScript существуют в двух частях. Во-первых, есть объект API, который является тем, что вы действительно получаете, когда звоните RenderScript.create() или new ScriptC_cats. Эти объекты API существуют в куче Dalvik и очень малы (может быть, несколько сотен байт для более крупных объектов). Эти объекты API привязаны к собственным объектам, доступ к которым API-интерфейсам Java осуществляется через JNI. Нативные объекты содержат фактическое хранилище для ваших Распределений, фактический биткод для ваших ядер и т. Д.

Драйверы поставщиков могут помещать буферы в специальные места для своих графических процессоров или подобных вещей, но из приложения POV разработчика, эквивалентного памяти выделенных за пределами Далвикской кучи.

+0

Итак, предположим, что мы хотим обрабатывать большие растровые изображения, мы можем передать входные растровые изображения и сразу же их переработать, а затем дать ему новый выходной растровый файл, чтобы поместить данные (или вообще не перерабатывать вообще), и просто дать то же самое растровый объект)? Таким образом, у вас не будет времени, когда вы держите 2 растровых изображения в памяти кучи памяти dalvik VM, верно? –

Смежные вопросы