【问题标题】:Why is memory not being released when I clear my array? [duplicate]为什么我清除数组时没有释放内存? [复制]
【发布时间】:2013-06-23 22:21:08
【问题描述】:

这段代码告诉我当前消耗的内存量:

-(u_int)memoryUsage {
    u_int result = 0;
    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);
    if( kerr == KERN_SUCCESS ) {
        result = (info.resident_size / 1024) / 1024;
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
    return result;
}

为了测试这个,我写了这个:

NSLog(@"USAGE: %u mb",[self memoryUsage]);

NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < 1000000; ++i) {
   [array addObject:@"Hello!"];
}

NSLog(@"USAGE: %u mb",[self memoryUsage]);
[array removeAllObjects];

NSLog(@"USAGE: %u mb",[self memoryUsage]);

输出是:

5 mb
10 mb
10 mb

创建一个包含 1000000 个字符串的数组后,内存增加了 5 mb。但是清理之后,内存使用没有被修改。

这是为什么呢?

【问题讨论】:

  • 该函数不会显示您的应用正在使用多少内存。它显示内核为您的应用程序的特定部分提供了多少地址空间。这个数字和对象分配之间的联系充其量是非常似是而非的。

标签: ios objective-c


【解决方案1】:

通常,从程序中释放内存分配不会将该内存返回给操作系统。内存分配系统保留释放的内存以供以后分配使用。

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 2011-06-19
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    相关资源
    最近更新 更多