3

さまざまな方法を使用してメモリフットプリントを測定しようとしましたが、各方法は異なる値を返します。

最初の方法は、アプリの実行中に Xcode の小さなゲージを見ることでした。20.9 MB の使用量を示しています。 ここに画像の説明を入力

2番目の方法は、このコードを使用していました(38〜39MBの使用量を示しています):

vm_size_t usedMemory(void) {
    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
    return (kerr == KERN_SUCCESS) ? info.resident_size : 0; // size in bytes
}

vm_size_t freeMemory(void) {
    mach_port_t host_port = mach_host_self();
    mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    vm_size_t pagesize;
    vm_statistics_data_t vm_stat;
    
    host_page_size(host_port, &pagesize);
    (void) host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
    return vm_stat.free_count * pagesize;
}

void logMemUsage(void) {
    // compute memory usage and log if different by >= 100k
    static long prevMemUsage = 0;
    long curMemUsage = usedMemory();
    long memUsageDiff = curMemUsage - prevMemUsage;
    
//    if (memUsageDiff > 100000 || memUsageDiff < -100000) {
        prevMemUsage = curMemUsage;
        NSLog(@"Memory used %7.1f (%+5.0f), free %7.1f kb", curMemUsage/1000.0f, memUsageDiff/1000.0f, freeMemory()/1000.0f);
//    }
}

3 番目の方法は、約 19 ~ 20 MB の使用量を示す計測器を使用していました

ここに画像の説明を入力

要するに、SDK のメモリ フットプリントを測定する方法を理解する必要があるということです。(SDKを追加する前とSDKを追加した後 - またはSDKの「ブラックボックス」測定)

どのように、そしてなぜ結果はそれほど異なるのでしょうか?

4

0 に答える 0