gpt4 book ai didi

android - Renderscript 中的内存分配

转载 作者:行者123 更新时间:2023-11-29 00:23:57 25 4
gpt4 key购买 nike

我想更好地了解内存分配在 Renderscript 中的工作原理。

首先,我想确认内存是在运行时还是编译时分配的。

文档指出:

Non-static, global variables that you declare in your RenderScript are allocated memory at compile time.

总是这样吗?

其次,Renderscript 请求分配给 Android VM 或 Android 物理内存的内存吗?

在文档中我只能找到以下内容:

Applications that use RenderScript still run in the Android VM. The actual RenderScript code, however, runs natively and needs access to the memory allocated in the Android VM.

没有清楚地回答上述问题。

最佳答案

假设您有一个脚本 (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 对象绑定(bind)到本地对象,Java API 通过 JNI 访问这些对象。 native 对象包含分配的实际后备存储、内核的实际位码等。

供应商驱动程序可能会将缓冲区放入他们的 GPU 或类似东西的特殊位置,但从应用程序开发人员的 POV 来看,这相当于在 Dalvik 堆之外分配的内存。

关于android - Renderscript 中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com