【发布时间】:2010-08-02 11:03:51
【问题描述】:
当我运行以下代码时,它会慢慢消耗我的内存,甚至开始使用交换:
long long length = 1024ull * 1024ull * 1024ull * 2ull; // 2 GB
db = [NSMutableData dataWithLength:length];
char *array = [db mutableBytes];
for(long long i = 0; i < length - 1; i++) {
array[i] = i % 256;
}
如果我在没有 for 循环的情况下运行它,则根本不会使用内存:
long long length = 1024ull * 1024ull * 1024ull * 2ull;
db = [NSMutableData dataWithLength:length];
char *array = [db mutableBytes];
/* for(long long i = 0; i < length - 1; i++) {
array[i] = i % 256;
} */
我只能得出结论,NSMutableData 只是“保留”内存,当它被访问时,它真的“分配”它。具体是怎么做的?
这是通过硬件 (CPU) 完成的吗?
NSMutableData 有没有办法在其“保留”内存中捕获内存写入,然后才进行“分配”?
这是否也意味着对[NSMutableData dataWithLength:length] 的调用永远不会失败?如果需要,它可以使用交换分配任意大小的内存吗?
如果失败,我的 db 变量是否会为空?
在苹果的“NSMutableData Class Reference”中,我只看到了关于这些主题的模糊句子。
【问题讨论】:
标签: objective-c memory-management error-handling