消耗足够内存导致应用程序被操作系统转储的最快方法是什么?

Sal*_*ule 5 objective-c ios

我有一个应用程序,我称之为内存吃,这是为了迫使其他应用程序被操作系统转储.它通过消耗大量内存来实现这一点,直到它因内存压力而终止.为了消耗内存,我基本上制作了数据的JPEG表示的副本:

-(IBAction)didTapStartButton:(id)sender{
    int i = 200;
    while (i>0) {
        NSData* data = [UIImagePNGRepresentation(self.image) mutableCopy] ;
        [self.array addObject:[[data description] mutableCopy]];
        [self.array addObject:data];
        i--;
    }
}
Run Code Online (Sandbox Code Playgroud)

这完全是通过反复试验完成的,我认为有一种更直接的方式来消耗大量的内存.

Die*_*Epp 7

你可以malloc()在循环中使用.

while (1) {
    int *ptr = malloc(4096);
    assert(ptr != NULL);
    *ptr = 0;
}
Run Code Online (Sandbox Code Playgroud)

*ptr = 0行必须强制页面变脏,否则您将占用地址空间而不是内存.数字4096确保通过循环的每次迭代将恰好将一个脏页面添加到地址空间,因为4096是最常见的页面大小.