正确的原始数组大小
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));
highestModelID
是 34078
,但尺码显示是 136312
。是分配错了还是读错了?
highestModelID
是 modelsPricesForCustomer
中元素的数量,而不是它的大小。 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)
时清除部分内存或越过已分配缓冲区的末尾
我正在尝试使用更轻的原始数组,因为在 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
。是分配错了还是读错了?
highestModelID
是 modelsPricesForCustomer
中元素的数量,而不是它的大小。 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)