应用程序使用的内存大小非常快

 行者师兄2502861743 发布于 2023-02-12 12:34

写了一个简单的程序来填充我的驱动器上的所有空间.它有一个非常简单的逻辑:

10创建一个文件

20写N(在我的情况下为40)随机块大小为M(在我的情况下为100 MiB)

30关闭文件

40 GOTO 10

好吧,我刚从头创建了一个新的Cocoa项目,并将代码放入了applicationDidFinishLaunching.就这个.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    fm = [NSFileManager new];

    unsigned long long size = 0;
    unsigned long long sizeMax = 0;

    NSString *path;
    NSData *data;
    NSFileHandle *myHandle;
    for (long i = 0; ; ++i) {
        if (i % 40L == 0) { // N = 40
            sizeMax = [self currentMaxSize];
            size = 0;

            path = [NSString stringWithFormat:@"/Users/user/Desktop/loltest/lol_%f.txt", [NSDate timeIntervalSinceReferenceDate]];

            [fm createFileAtPath:path contents:[NSData data] attributes:nil];
            [myHandle closeFile];
            myHandle = [NSFileHandle fileHandleForWritingAtPath:path];
        }

        [myHandle seekToEndOfFile];

        data = [self randomData];
        size += data.length;
        [myHandle writeData:data];
        data = nil;

        if (size >= sizeMax) {
            [myHandle closeFile];
            break;
        }
    }

    NSLog(@"OKAY");
}

- (unsigned long long)currentMaxSize
{
    return [[fm attributesOfFileSystemForPath:@"/" error:nil][NSFileSystemFreeSize] unsignedLongLongValue];
}

- (NSData *)randomData
{
    const int LENGTH = 100 * 1024 * 1024; // M
    char *bytes = (char *)malloc(LENGTH * sizeof(char)); // Well that supposed to be static and dispatched_once, but I removed that when tried to fix leaks

    for (NSInteger i = 0; i < LENGTH; ++i) {
        bytes[i] = arc4random() % 256 - 128; // chosen by fair dice roll.
                                             // guaranteed to be random.
    }

    NSData *data = [NSData dataWithBytes:(void *)bytes length:LENGTH];
    free(bytes);
    return data;
}

当我运行那个,1分钟后1 GiB泄露并且仍然.结束系统的内存管理窗口和活动监视器,显示我使用的60 GiB交换.

我运行的仪器告诉我,该Overall bytes部分等于活动监视器为应用程序显示的内容.但是,一次只有一个对象,分配图是锯,随机数据的指针在函数调用之间是恒定的.也许NSData以某种方式持有源数组,但我根本无法解决这个难题.

锯

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有