ios 带有memset的Xcode malloc在发布时不会导致内存增加

jv4diomz  于 2022-12-24  发布在  iOS
关注(0)|答案(1)|浏览(111)

我想用下面的代码手动创建一个OOM:

[NSTimer scheduledTimerWithTimeInterval:0.1 repeats:true block:^(NSTimer * _Nonnull timer) {
    void *bytes = malloc(1024*1024*50);
    memset(bytes, 1, 1024*1024*50);
}];

但是内存没有增加,我将代码更改为:

void **array = malloc(UINT32_MAX*sizeof(void *));
__block int64_t i = 0;
[NSTimer scheduledTimerWithTimeInterval:0.1 repeats:true block:^(NSTimer * _Nonnull timer) {
    void *bytes = malloc(1024*1024*50);
    memset(bytes, 1, 1024*1024*50);
    array[i] = bytes;
    i++;
}];

快去
所以我的问题是为什么第一个malloc和memset没有增加真实的的内存使用。另一个信息是第一个代码在调试时导致了OOM,但是在发布时没有用。有人能对此给予一些解释吗(不是明显的怀疑

njthzxwz

njthzxwz1#

你有一个优化的编译器,如果编译器能证明malloc()调用是无意义的,就像这里,那么它可以删除调用,这是最有可能发生的事情。
而且我在你的代码中找不到任何“发布”。所以你能修复标题,或者添加丢失的代码吗?

相关问题