Как я могу диагностировать эту утечку памяти, которая приводит к сбою сайта на мобильных устройствах

Нет, short делает not гарантией 16-битной длины. Единственными гарантиями в отношении основных целых типов данных являются:

  • sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
  • sizeof(char) == 1 (примечание: a char все равно может быть более 8 бит!)
  • SHRT_MIN <= -32767 и SHRT_MAX >= 32767 (подразумевается, что short составляет не менее 16 бит)
  • INT_MIN <= -32767 и INT_MAX >= 32767 (подразумевает int не менее 16 бит)
  • LONG_MIN <= -2147483647 и LONG_MAX >= 2147483647 (подразумевается, что long составляет не менее 32 бит)
  • LLONG_MIN <= -9223372036854775807 и LLONG_MAX >= 9223372036854775807 (подразумевается, что long long не менее 64 бит)

(C99 §5.2.4.2.1 и приложение E)

Тот факт, что short задан int16_t на , ваш означает, что short - 16 бит на вашей машине . Это не означает, что определение будет одинаковым на машинах других людей (или даже на других компиляторах на вашей же машине).

Если вы включите <stdint.h>, он определит int16_t каким-то образом который гарантированно будет типом, который подписан и имеет ширину 16 бит. Если вам нужны точные размерные числа, используйте те точные типы.

0
задан Greg Fielding 27 February 2019 в 16:08
поделиться