我想在Android系统中将大数据从一个进程/应用程序传输到另一个进程/应用程序,但在Java层使用内存文件创建共享内存的方法并不奏效。
然后尝试在android原生中创建共享内存,我在某处阅读了
ashmem_create_regionAPI可以使用。但看起来这个API无法访问或打开。它在libcutils.so.
这是在
android-ndk-r9c/platforms/android-19/arch-arm/usr/lib/rs/libcutils.so
Q1.如何在android本机代码中访问此库。
如果无法访问,那么在ndk工具中提供此功能的目的是什么。
如果我把libcutil联系起来。因此,可以使用libcutils在本机中创建共享内存。那么,我可以使用这个fd在Java层映射MemoryFile,这样就可以避免为每个数据事务编写应用程序本机副本。
唇膏。so在ndk中提供,以支持renderscript集成。它仍然是一个未经证明的系统库,因为Android并没有promise在所有平台上支持其所有API,尤其是在未来的平台上,请参阅Android ndk用户组的更多信息。
也就是说,我应该承认使用ashmem是相当安全的,因为从v.1开始,它就在Java API中明确记录。我写了一个针对libcutil的链接的简短解决方案。所以在其他地方。
下面通过以下内容讨论ashmem\u create\u region()API和IPC的注意事项:https://groups.google.com/forum/m/#!topic/android平台/L6a6Xvn4HSI。tl;nr:握手时你还需要活页夹。
您的Java代码可以使用一些变通方法访问fd。
更新:新的NDK r9d已推出,libcutils。正如@TimMurray在下面的评论中promise的那样,so不再出现在平台/android-19/arch-arm/usr/lib目录中。
共享内存是两个或多个进程共享的内存。 但是,为什么我们需要共享内存或其他通信方式呢? 重申一下,每个进程都有自己的地址空间,如果任何进程想要将自己的地址空间的某些信息与其他进程进行通信,那么只能通过IPC(进程间通信)技术进行。 我们已经知道,通信可以在相关或不相关的进程之间进行。 通常,使用管道或命名管道来执行相互关联的进程通信。 可以使用命名管道或通过共享内存和消息队列的常用IPC技术执行无关
通过查看shmget()的手动页面,我了解到shmget()调用在内存中分配了#个页面,这些页面可以在进程之间共享。 它是否要创建内核内存页,并将其映射到进程的本地地址空间?还是为该段保留了相同的进程内存页,并将为其他附加进程共享相同的内存页? 调用shmget()时,内核将保留一定数量的段/页。 调用shmat()时,保留的段映射到进程的地址空间/页。 当一个新进程附加到同一段时,前面创建的内核
问题内容: 我已经尝试了好几个小时,并且用谷歌搜索了所有我想到的东西,但是我快要疯了。 我有一个结构: 直到以后,我才知道int (矩阵)和char 的大小。 完成后,我将创建共享内存,如下所示: 没问题 然后,我给ctrl-> rows和collumns赋一个值,并将0赋给所有矩阵。 但是之后,我在char *和bam中写了一些段错误。 调试程序时,我看到mat和IDs_row这两个指针都为nu
问题内容: 我有三个大名单。前一个包含位数组(模块位数组0.8.0),另外两个包含整数数组。 这些数据结构占用相当多的RAM(总计约16GB)。 如果我使用以下方法启动12个子流程: 这是否意味着将为每个子流程复制l1,l2和l3,或者子流程将共享这些列表?或者更直接地说,我将使用16GB还是192GB的RAM? someFunction将从这些列表中读取一些值,然后根据读取的值执行一些计算。结果
问题内容: 我有一个函数,该函数将指向内存的指针作为参数,并写入和读取该内存: 我分配喜欢这样: 我的问题现在是:不同的线程如何处理呢?我的猜测是,指向的内存将由所有线程共享,并在函数内部“同时”读取或写入。然后,由于不能依赖先前设置的datavalue(在内),这会弄乱所有结果?我的猜测是正确的还是在cython编译器中实现了一些魔术安全带? 提前非常感谢您。 问题答案: 我假设没有线程的读或写
EasySwoole对Swoole table进行了基础的封装。 方法列表 getInstance() 该方法用于获取TableManager管理器实例 add($name,array $columns,$size = 1024) 该方法用于创建一个table get($name):?Table 该方法用于获取已经创建好的table 示例代码 TableManager::getInstance()