我想用下面的代码手动创建一个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,但是在发布时没有用。有人能对此给予一些解释吗(不是明显的怀疑
1条答案
按热度按时间njthzxwz1#
你有一个优化的编译器,如果编译器能证明malloc()调用是无意义的,就像这里,那么它可以删除调用,这是最有可能发生的事情。
而且我在你的代码中找不到任何“发布”。所以你能修复标题,或者添加丢失的代码吗?