在Android中的动态分配

Dynamic allocation of memory in Android

本文关键字:动态分配 Android      更新时间:2023-10-16

我在我的ndk代码中动态分配内存,我尝试了以下两种方法:

1)

vector<char> buffer_; 
buffer_.resize(len_);

2)

char* buffer_; 
buffer_ = new char[len_];

len_是一个很大的数字,在我的测试中,是132710400,约为130 MB。两种方式都有效!当我检查Android监视器中的内存使用量时,内存仅使用〜30MB。我知道分配的内存只是虚拟内存,并且可能不会从物理内存中分配。但是我敢肯定,我已经从此内存中写了并阅读,因此必须实际分配。我只想知道这怎么会发生?Android显示器有问题吗?还是我对Android OS不了解?或Android监视器无法跟踪本机代码使用的内存?

您可以使用命令行工具来查看您使用的过程的虚拟内存和居民内存多少。

首先,请确保您在应用程序标签中拥有的AndroidManifest.xml中有android:debuggable="true"

然后在命令行上,您可以使用ADB执行shell命令。

$ adb shell run-as com.yourdomain.yourapp /system/bin/sh -c "ps aux"

第四列显示虚拟大小,第五列显示了居民设置大小。报告的尺寸为页面,每个字节可能为4096字节。

如果新的和向量之间的MEM使用仍然存在,请添加memset(buffer_, 0, len_),并且应该相似。