正确的原始数组大小

时间:2016-04-16 17:27:38

标签: objective-c primitive-types

我正在尝试使用更轻的原始数组,因为在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));

highestModelID34078,但大小却是136312。我分配错了还是读错了?

1 个答案:

答案 0 :(得分:2)

highestModelIDmodelsPricesForCustomer中元素的数量,而不是其大小。另一方面,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)

时清除部分内存或超过已分配缓冲区的末尾