我正在尝试使用更轻的原始数组,因为在NSMutableDictionary中存储数十万个NSNumbers会导致40-50MB的内存消耗。
这是我的代码:
NSUInteger highestModelID = [self.externalDB intForQuery:@"SELECT `id` FROM `models` ORDER BY `id` DESC"];
CGFloat modelsPricesForCustomer[highestModelID];
memset(modelsPricesForCustomer, 0, highestModelID*sizeof(NSUInteger));
NSLog(@"%i", highestModelID);
NSLog(@"%lu", (sizeof modelsPricesForCustomer));
highestModelID
是34078
,但大小却是136312
。我分配错了还是读错了?
答案 0 :(得分:2)
highestModelID
是modelsPricesForCustomer
中元素的数量,而不是其大小。另一方面,sizeof
以字节为单位返回数组的大小,即highestModelID*sizeof(CGFloat)
由于您系统上的sizeof(CGFloat)
为4,因此结果正确无误:
34078 * 4 = 136312
注意:
memset(modelsPricesForCustomer, 0, highestModelID*sizeof(NSUInteger));
// ^^^^^^^^^^
应该是
memset(modelsPricesForCustomer, 0, highestModelID*sizeof(CGFloat));
// ^^^^^^^
以避免在sizeof(NSUInteger) != sizeof(CGFloat)