我正在尝试模拟重内存负载下组件的行为。
主要的想法是分配一堆内存,让它保持驻留,然后使用我的组件,但无论我做什么,我故意分配的内存似乎都会以某种方式消失。
在使用强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);
}
}
无论我为chunks
和bytes
设置什么,只要可以分配内存,它就会从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;