iOs记忆压力测试

时间:2015-04-29 14:15:23

标签: ios objective-c memory-management

我正在尝试模拟重内存负载下组件的行为。

主要的想法是分配一堆内存,让它保持驻留,然后使用我的组件,但无论我做什么,我故意分配的内存似乎都会以某种方式消失。

在使用强NSArray的NSData块(每个1Mb)进行第一次测试后,我尝试采用更粗糙但更低级别的方法(以防止一些ARC魔法发生):

// somewhere after the includes
static char *foo[MAX_CHUNKS];

[...]

// this function is actually called, I checked :)
- (void) allocateMemoryChunks:(int) chunks ofSize:(long) bytes {
    for(int i = 0; i < chunks; ++i) {
        foo[i] = (char *) malloc(bytes);
    }
}

无论我为chunksbytes设置什么,只要可以分配内存,它就会从Xcode中的内存计数中“消失”,并留下我通常消耗的2Mb应用程序(我说的是400个1024 * 1024字节的块的范围内的分配,或400 * 1024 * 1024字节的1个块,值得......)。

内存显然超出了ARC的范围(我使用普通的C mallocs!)但是,我看不到它(请注意,当我使用NSData和NSArray来保存数据时也是如此)。

记忆在哪里?我忘记了什么?

谢谢!

附录

对于记录,allocateMemoryChunks的ARC版本是:

- (void) allocateMemoryChunks2:(int) nchunks ofSize:(long) bytes {
    self.allocated = [NSMutableArray arrayWithCapacity:nchunks];
        for(int i = 0; i < nchunks; ++i) {
        char *tmpraw = (char *) malloc(bytes);
        NSData *tmp = [NSData dataWithBytes:tmpraw length:bytes];
        [self.allocated addObject:tmp];
        free(tmpraw);
    }
}

allocated声明为:

@property (nonatomic, strong) NSMutableArray *allocated;

0 个答案:

没有答案