Проблемы квантования для 64-битной среды выполнения
В некоторых ситуациях может быть веская причина использовать стандартные типы вместо NSInteger
: «неожиданное» увеличение объема памяти в 64-битной системе.
Очевидно, что если целое число равно 8, а не 4 байта, объем памяти, занятый значениями, удваивается. Учитывая, что не каждое значение является целым числом, вы, как правило, не должны ожидать, что объем памяти вашего приложения удвоится. Однако способ, которым Mac OS X выделяет память, изменяется в зависимости от запрошенного объема памяти.
В настоящее время, если вы запрашиваете 512 байт или меньше, malloc
округляется до следующего кратного 16 байт. Однако, если вы запрашиваете более 512 байт, malloc
округляется до следующего кратного 512 (не менее 1024 байт). Предположим, что вы определили класс, который, среди прочего, объявляет пять NSInteger
переменных экземпляра и что в 32-битной системе каждый экземпляр занимает, скажем, 272 байта. В 64-битной системе экземпляры теоретически требуют 544 байта. Но из-за стратегии выделения памяти каждый фактически будет занимать 1024 байта (почти четырехкратное увеличение). Если вы используете большое количество этих объектов, объем памяти вашего приложения может быть значительно больше, чем вы могли бы ожидать. Если вы замените переменные NSInteger
переменными sint_32
, вы будете использовать только 512 байт.
Поэтому при выборе скаляра убедитесь, что вы выбрали что-то разумное. Есть ли какая-то причина, по которой вам нужно значение больше, чем в 32-битном приложении? Использование 64-разрядного целого числа для подсчета количества секунд вряд ли будет необходимо ...