正确的原始数组大小

Correct primitive array size

我正在尝试使用更轻的原始数组,因为在 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。是分配错了还是读错了?

highestModelIDmodelsPricesForCustomer 中元素的数量,而不是它的大小。 sizeof,另一方面,returns 数组的字节大小,即 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)

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