Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

size_t

06 Фев 2023

size_t – это специальный беззнаковый целочисленный тип, определенный в стандартных библиотеках языков С и С++. Является типом результата, возвращаемого оператором sizeof и alignof.

Размер size_t выбирается таким образом, чтобы в него можно было записать максимальный размер теоретически возможного массива или объекта. Другими словами, количество бит в size_t равно количеству бит, которое требуется для хранения максимального адреса в памяти машины. Например, на 32-битной системе size_t будет занимать 32-бита, на 64-битной — 64-бита. В свою очередь это означает, что в тип size_t может быть безопасно помещен указатель (исключение составляют платформы с сегментной адресацией и указатели на функции-члены классов).

Данный тип перекладывает заботу о возможном разном поведении целочисленных переменных при смене платформы с плеч программиста на реализацию стандартной библиотеки. Поэтому использование типа size_t безопаснее и эффективнее, чем использование обычных беззнаковых целочисленных типов:

  • Данный тип позволяет писать, циклы и счётчики, не беспокоясь о возможном переполнении при смене платформы. Например, когда количество необходимых итераций превышает UINT_MAX;
  • Поскольку стандартом гарантируется, что size_t может вместить в себя размер максимально возможного объекта в системе, этот тип используют для хранения размеров объектов;
  • Из-за этого же свойства size_t используют для индексации массивов. В отличие от обычных базовых целочисленных типов, size_t гарантирует, что значение индекса не может быть больше SIZE_MAX;
  • Так как в size_t обычно может быть безопасно помещён указатель, его используют для адресной арифметики, однако, для этих целей лучше подходит другой беззнаковый целочисленный тип uintptr_t, само название которого отражает его предназначение;
  • Компилятор может построить более простой и, следовательно, более быстрый код, в котором будут отсутствовать лишние преобразования 32-битных и 64-битных данных.

В языке С тип size_t объявлен в заголовочных файлах <stddef.h>, <stdlib.h>, <string.h>, <wchar.h>, <uchar.h>, <time.h> и <stdio.h>. В языке С++ его декларация находится в файлах <cstddef>, <cstdlib>, <cstring>, <cwchar>, <cuchar>, <ctime> и <cstdio>. Тип size_t размещен в глобальном пространстве имён и в std. Стандартные заголовочные файлы языка C для обеспечения обратной совместимости также могут включаться в С++ программы.

В терминах статического анализатора PVS-Studio тип size_t относится к memsize-типам. В анализаторе существует большое количество специальных 64-битных диагностических правил, выдаваемых анализатором и связанных именно с рекомендацией внедрения memsize-типов. Если вы планируете заняться разработкой кроссплатформенных проектов или переносом существующих 32-битных проектов на 64-битные системы, то вы можете использовать анализатор PVS-Studio, который существенно упростит эту задачу и позволит избежать длительного этапа поиска скрытых ошибок.

Более подробно об ошибках, которых можно избежать при использовании типа size_t, а также о том, как этот тип данных позволит улучшить и оптимизировать ваши программы, вы можете познакомиться в статьях, приведенных в библиографическом списке.

Библиографический список

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам